设计模式思考之 Factory Method 模式

这是我参与8月更文挑战的第22天,活动详情查看:8月更文挑战

可能很多人学习设计模式首先学习的就是工厂模式,然后也可能是最后一个。这是一个相对简单的模式,向开发者透传的是一种封装与隔离的思想。工厂是一种更高级的类实例化的方式(相对于new Object()),这也是在《effective java》开篇就提到的类的创建的建议。那么还是老规矩,工厂模式的好处在哪:

  • 创建与使用隔离,创建对象不必关心其内部实现
  • 行为抽象之后,包含多个功能类似的类,可以节省大量重复代码
  • 业务上需要修改逻辑,不必大量修改所有的实现

下面举例说明:

图片.png

图中包含两个抽象类:Factory和Product。其中Factory包含了创建和注册产品,而create()方法则是对外开放的Product对象实例化的方法。具体的实现如下:

public abstract class Factory {
    public final Product create(String owner) {
        Product p = createProduct(owner);
        registerProduct(p);
        return p;
    }
    
    protected abstract Product createProduct(String owner);
    protected abstract void registerProduct(Product product);
}

public abstract class Product {
    public abstract void use();
}
复制代码

子类必须实现createProduct方法来使用create(),这个方法设置为final,子类直接就可以使用并实例化Product。现在是IDCard的实例创建,如果业务上需要TVProduct这样的对象需要创建,那可以直接实现抽象的方法,不需要修改任何抽象的方法。

回过头来我们也会发现,这个跟模版方法模式十分类似,都是为了抽象行为,规避重复代码。甚至在所谓的23种设计模式里面,很多模式了解完了之后发现功能十分类似,但就改头换面换了个说法。其实还是有细微的区别,但万变不离其宗的是行为的抽象,交给子类实现细节,可以节省大量样板代码,然后可维护性更强。

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享