工厂方法模式
工厂方法模式构建
-
创建者(Creator)声明返回产品对象的工程方法,该方法的返回对象类型必须与产品接口相匹配。你可以将工厂方法声明为抽象方法,强制要求每个子类以不同的方式实现该方法。或者,你可以在基础工厂方法中返回默认产品类型。
public abstract IProduct CreateProduct();
注意:尽管它的名字是创建者,单他最主要的职责不是创建产品。一般来说,创建者类包含一些与产品相关的核心业务逻辑。工厂方法将这些逻辑处理从具体产品中分离出来。比如:运输公司可以通过水运、航运、铁运等运输产品,但抽离出来都是运输这一个活动,只是方式不同。
public string SomeOperation() { var product = CreateProduct(); var result = "Creator: The same creator's code has just worked with " + product.Operation(); return result; }
-
具体创建者(Concrete Creator)将会重写基础工厂方法,使其返回不同类型的产品。
class ConcreteCreatorA : Creator { public override IProduct CreateProduct() { return new ConcreteProductA(); } }
注意:并不一定每次调用工厂方法都会创建新的实列。工厂方法可以返回缓存、对象持或其他来源的已有对象。
-
产品(Product)将会对接口进行声明,对所有由创建者及其子类构建的对象,这些接口都是通用的。
-
具体产品(Concrete Product)是产品接口的不同实现。
完整的示例代码如下: