不将 class 对象作为参数传递的适配器模式
Adapter pattern without passing class object as parameter
我有一个非常简单的问题。互联网上有适配器模式的示例,在每个示例中,适配器 class 获取需要作为参数进行调整的 class 的对象。像这样:
class Adapter {
private SomeClass someClass;
public Adapter(SomeCLass someClass){
this.someClass = someClass;
}
public adaptMethod(){
...
}
}
如果我这样做:
class Adapter {
private SomeClass someClass;
public Adapter(){
this.someClass = new SomeClass();
}
public adaptMethod(){
...
}
}
这仍然是适配器模式吗?
不,这不是一个适配器,因为它不适应一个class的对象以在另一个接口下使用,而是拥有它。这违反了 SRP.
适配器类似于装饰器。装饰器向 class 的方法添加一些功能,适配器更改其接口。但是两者都需要一个目标对象。
是的,这仍然是一个适配器。它匹配来自 GoF 的描述和 UML,特别是 object adapter 模式。
虽然您可能会对对象适配器支持适配器的子类这一说法存疑...
An object adapter lets a single Adapter work with many Adaptees -- that is, the Adaptee itself and all of its subclasses.
...我会说这不是模式的关键点,如果是,那么反射可以实现它。该模式没有指定 如何 适配器必须组成其适配器。这只是一个实施细节(Dependency Inversion Principle 将有更多关于该细节的说法)。
我有一个非常简单的问题。互联网上有适配器模式的示例,在每个示例中,适配器 class 获取需要作为参数进行调整的 class 的对象。像这样:
class Adapter {
private SomeClass someClass;
public Adapter(SomeCLass someClass){
this.someClass = someClass;
}
public adaptMethod(){
...
}
}
如果我这样做:
class Adapter {
private SomeClass someClass;
public Adapter(){
this.someClass = new SomeClass();
}
public adaptMethod(){
...
}
}
这仍然是适配器模式吗?
不,这不是一个适配器,因为它不适应一个class的对象以在另一个接口下使用,而是拥有它。这违反了 SRP.
适配器类似于装饰器。装饰器向 class 的方法添加一些功能,适配器更改其接口。但是两者都需要一个目标对象。
是的,这仍然是一个适配器。它匹配来自 GoF 的描述和 UML,特别是 object adapter 模式。
虽然您可能会对对象适配器支持适配器的子类这一说法存疑...
An object adapter lets a single Adapter work with many Adaptees -- that is, the Adaptee itself and all of its subclasses.
...我会说这不是模式的关键点,如果是,那么反射可以实现它。该模式没有指定 如何 适配器必须组成其适配器。这只是一个实施细节(Dependency Inversion Principle 将有更多关于该细节的说法)。