Como implementar SOLID em uma segregação de interface

StuartDTO:

Eu tenho um interfacecomo este:

interface ClientRequestListener {
    fun onLoadStub(name: String)
    fun onClientNeeded(id: String, email: String)
}

Mas então, quando implementá-lo em uma classe Eu só preciso o onClientNeededexiste alguma maneira para evitar ter de substituir estes dois métodos? Eu tentei criar outra interface que estende esse um, mas ainda me pedindo para implementar os métodos ..

Esclarecimento

Eu estou usando uma biblioteca externa, que usa uma interface com estes dois métodos, ea coisa é onde eu estou usando isso eu só preciso de um método em vez de ambos, e em vez de ter uma substituição de fazer qualquer coisa que eu só queria saber uma maneira de evitar que override extra que eu não preciso.

EDITAR

fun doSomeMagic(name: String, clientRequestListener: ClientRequestListener? = null) =
    LibraryRequest.getClient(name)
        .withListener(object : LibraryInterface() {
            override fun onLoadStub(name: String) {
                clientRequestListener?.onLoadStub(name)
            }

            override fun onClientNeeded(id: String, email: String) {
                clientRequestListener?.onClientNeeded(id, email)
            }
        })

Então, quando eu estou usando esse método que eu fazer algo assim:

doSomeMagic("Charls", object : ClientRequestListener {
  override fun onClientNeeded(name: String) {
    //I'm not doing nothing here
  }

  override fun onClientNeeded(id: String, email: String) {
    //Do something with the id and email
  }
})

Então o que eu gostaria de fazer é algo para chamar única onClientNeededlá em vez de ambos.

Demigod:

Você pode mudar as coisas em um várias opções aqui:

a) Você pode criar uma classe abstrata que irá fornecer padrão de implementação (vazio) do método desnecessários, e irá forçá-lo a substituir único método que você está interessado em:

abstract class AbsClientRequestListener {
    override fun onLoadStub(name: String) {
    }
    abstract fun onClientNeeded(id: String, email: String)
}

b) Se você tem um hierarachy de classes, você pode fornecer uma implementação padrão em sua classe base e deixar onClientNeededpor implementar para as subclasses:

interface ClientRequestListener {
    fun onLoadStub(name: String)
    fun onClientNeeded(id: String, email: String)
}

abstract class BaseClient: ClientRequestListener {
    override fun onLoadStub(name: String) {
        // Leave empty
    }
}

class Client:BaseClient() {
    override fun onClientNeeded(id: String, email: String) {
        // Put required implementation
    }
}

c) Ou você pode simplesmente usar essa interface como está e fornecer uma implementação vazia cada vez :)

EDITAR

No seu caso específico, você pode adicionar classe ClientRequestListenerAdapter:

abstract class ClientRequestListenerAdapter : ClientRequestListener {
    override fun onLoadStub(name: String) {
    }
}

E usá-lo como este:

doSomeMagic("Charls", object : ClientRequestListenerAdapter {
  override fun onClientNeeded(id: String, email: String) {
    //Do something with the id and email
  }
})

Não ocorreram alterações na função doMagicsão necessários.

Acho que você gosta

Origin http://43.154.161.224:23101/article/api/json?id=349793&siteId=1
Recomendado
Clasificación