工厂方法 Factory Method
程序员文章站
2022-06-15 14:15:18
...
父博文地址:设计模式 - Design Patterns
一、是什么?
作用
当我在超类中写操作产品的业务逻辑,而想把创建产品的行为推迟到子类时,我可以使用工厂方法。
将客户(超类中的业务代码)和具体创建对象的代码解耦。
行为
- 工厂方法利用继承,把创建对象的工作推迟到子类(在子类覆盖工厂方法创建对象)。
二、实例
-
上面类图的实现
Creator
代码:public abstract class Creator { public Product bizMethod(String type) { Product product = createProduct(type); // product.othersMethod(); // product.othersMethod(); // product.othersMethod(); return product; } protected abstract Product createProduct(String type); }
Client
代码:public class Client { public static void main(String[] args) { Creator creator = new ConcreteCreatorA(); Product p = creator.bizMethod("A"); System.out.println(p.getClass().getSimpleName()); } }
三、问答
-
和简单工厂的区别?
它们很类似,但用法不同。某一个具体的创建者子类看起来都很像是一个“简单工厂”。所以工厂方法的特点就是,这里有抽象类、有继承、依赖覆盖方法来创建对象。
-
工厂方法是否必须是
abstract
的?不是,可以定义一个有方法体的工厂方法来创建某个具体产品,这样即使没有子类也可以创建产品。(此时与简单工厂的区别就是简单工厂还可以是
static
的)。 -
所以依赖的原则?
依赖倒置原则:高层不应该依赖于低层,高层和低层都应该依赖于抽象。
Creator 不依赖于ConcreteProductA,Creator和ConcreteProductA都只依赖于Product。