Costruire un editor dell'interfaccia utente per Android e fondamentalmente ci sono interfacce come questa:
interface Item {
fun decorate()
fun translate(x: Int, y: Int)
fun rotate(rotation: Float)
fun scale(scale: Float)
fun select(value: Boolean)
}
è stato esteso anche con interfacce come queste:
interface Removable {
fun remove()
}
Significa che il View
che è un Item
che può essere rimosso implementa sia Item
(ovviamente) che Removable
.
Ma oltre a questi, per View
s che hanno proprietà uniche, come le proprietà del testo, questo è stato creato:
interface Updatable {
fun update(data: Any)
}
Ciò richiede alcune classi di dati che possono essere interpretate dopo il controllo dei tipi per aggiornare / modificare View
.
Per essere più chiari, l'implementazione di Item
, BasicItem
avrà il target View
impostato tramite un metodo setter.
Questo significa che un RemovableTextItem
implementerà Item
, Removable
e Updatable
tramite delega dove una delle classi delegate per Item
interfaccia sarebbe BasicItem
e per le altre interfacce implementazioni simili sarebbero delegato a.
Il problema in questo approccio è la verbosità e l'aggiunta di alcuni metodi a Item
ora sembra un peso. Si noti che l'ereditarietà qui, viene evitata deliberatamente nella pratica di prestito della composizione più a questo problema.
Suggeriresti di ridurre tutto a un'interfaccia Item
con il metodo update
che accetta solo ItemProperties
data class che verrebbe interpretata dalla classe che la implementa?