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(); } }
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步