2.设计模式-Abstract Factory 抽象工厂模式
大神勿喷,不对的地方请指出来,学笔记而已。
解决的问题:应对多系列对象构建的变化或多系列(例如:崎岖的山路和平坦的马路属于一个系列) 不断的变化的创建。
使用场景:对象不变(比如有3个对象 "路, 房子, 湖" 这些不能有增加或者减少),系列经常变,并且比较多(”路“对象 包含崎岖的山路和平坦的马路等)
针对上图用代码表示:
public abstract class AbstractProductA { } public abstract class AbstractProductB { } public abstract class AbatractFactory { public abstract AbstractProductA CreateAbstractProductA(); public abstract AbstractProductB CreateAbstractProductB(); } public class ConcreteAbstractProductA : AbstractProductA { } public class ConcreteAbstractProductB : AbstractProductB { } //实例1 public class ConcreteFactroy1 : AbatractFactory { public override AbstractProductA CreateAbstractProductA() { return new ConcreteAbstractProductA();//ProductA1 } public override AbstractProductB CreateAbstractProductB() { return new ConcreteAbstractProductB();//ProductB1 } } //实例2 public class ConcreteFactroy2 : AbatractFactory { public override AbstractProductA CreateAbstractProductA() { return new ConcreteAbstractProductA();//ProductA2 } public override AbstractProductB CreateAbstractProductB() { return new ConcreteAbstractProductB();//ProductB2 } } //Client public class ClientManager { public AbatractFactory m_abatractFactory; public ClientManager(AbatractFactory abatractFactory) { m_abatractFactory = abatractFactory; } public AbstractProductA abstractProductA; public AbstractProductB abstractProductB; public void BuildProduct() { abstractProductA = m_abatractFactory.CreateAbstractProductA(); abstractProductB = m_abatractFactory.CreateAbstractProductB(); } } public class Operator { //实例出不同的实例 public void TestFactory() { ClientManager client1Manager = new ClientManager( new ConcreteFactroy1()); client1Manager.BuildProduct(); ClientManager client2Manager = new ClientManager(new ConcreteFactroy2()); client2Manager.BuildProduct(); } }