这是我参与8月更文挑战的第22天,活动详情查看:8月更文挑战
可能很多人学习设计模式首先学习的就是工厂模式,然后也可能是最后一个。这是一个相对简单的模式,向开发者透传的是一种封装与隔离的思想。工厂是一种更高级的类实例化的方式(相对于new Object()),这也是在《effective java》开篇就提到的类的创建的建议。那么还是老规矩,工厂模式的好处在哪:
- 创建与使用隔离,创建对象不必关心其内部实现
- 行为抽象之后,包含多个功能类似的类,可以节省大量重复代码
- 业务上需要修改逻辑,不必大量修改所有的实现
下面举例说明:
图中包含两个抽象类: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