做网站用vue吗,手机兼职平台网站开发,网站刷流量有什么用,wordpress地址重改24种常用设计模式
创建型模式#xff1a;抽象工厂、生成器、工厂方法、原型、单例#xff1b;
结构型模式#xff1a;适配器、桥接、组合、装饰、外观、享元、代理#xff1b;
行为模式#xff1a;责任链、命令、迭代器、中介者、备忘录、观察者、状态、策略、模板方法…24种常用设计模式
创建型模式抽象工厂、生成器、工厂方法、原型、单例
结构型模式适配器、桥接、组合、装饰、外观、享元、代理
行为模式责任链、命令、迭代器、中介者、备忘录、观察者、状态、策略、模板方法、访问者
工厂方法模式是一种创建型设计模式其在父类中指定一个创建对象的方法允许子类决定实例化对象的类型。
使用场景
当你在编写代码时如果无法确切预知对象的确切类别以及依赖关系时可以选择使用工厂方法模式
工厂方法将创建产品的代码和使用产品的代码分离从而能在不影响其它代码的使用情况下扩展产品创建部分的代码
如果你希望用户能够扩展你的软件库或框架内部组件
工厂方法的优缺点
优点可以避免创建者和具体产品之间的耦合单一职责原则将产品创建代码放在程序单一位置使代码更容易维护开闭原则无需更改现有客户端代码就可以在程序中引入新的产品功能。
缺点需要引入许多新的子类代码可能会变得复杂。
识别方法
工厂方法通过构建方法来识别它会创建具体类的对象但以抽象类型或接口的形式返回这些对象。
代码实现
工厂抽象类
abstract class Creator{public abstract IProduct FactoryMethod();public string SomeOperation(){var product FactoryMethod();var result Creator: The same creators code has just worked with product.Operation();return result;}}
具体工厂子类实现
class ConcreteCreator1 : Creator{public override IProduct FactoryMethod(){return new ConcreteProduct1();}}class ConcreteCreator2 : Creator{public override IProduct FactoryMethod(){return new ConcreteProduct2();}} 产品接口
public interface IProduct{string Operation();}
具体产品实现类
class ConcreteProduct1 : IProduct{public ConcreteProduct1() { }public string Operation(){return Result of ConcreteProduct1;}}class ConcreteProduct2 : IProduct{public string Operation(){return Result of ConcreteProduct2;}}
客户端
class Client{public void Main(){Debug.WriteLine(App: Launched with the ConcreteCreator1.);ClientCode(new ConcreteCreator1());Debug.WriteLine();Debug.WriteLine(App: Launched with the ConcreteCreator2.);ClientCode(new ConcreteCreator2());}public void ClientCode(Creator creator){// ...Debug.WriteLine(Client: Im not aware of the creators class, but it still works.\n creator.SomeOperation());// ...}}