不将 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 将有更多关于该细节的说法)。