本文用简洁的方法,总结常用的设计模式
设计模式主要分成三大类,每一类都有一些具体模式,总结如下
- 创建型模式
- 抽象工厂模式
- 生成器模式
- 原型模式
- 单例模式
- 结构型模式
- 行为模式
抽象工厂模式
Factory Method is a creational design pattern that provides an interface for creating objects in a superclass, but allows subclasses to alter the type of objects that will be created.
抽象工厂模式主要是由父类指定一个构造方法,子类实现,而非直接调用构造方法
这个是一个不使用工厂模式的例子:
public class Information { public string Name { get; set; } } public class CalInfo : Information { public string Description { get; set; } } public class ImageInfo : Information { public int Width { get; set; } public int Height { get; set; } } public class CalEngine { public void Print(CalInfo info) { Console.WriteLine("CalEngine Print" + info.ToString()); } } public class Render { public void Print(ImageInfo info) { Console.WriteLine("Render Print" + info.ToString()); } }
可以看到,Render和CalEngine都会使用特定的Information,Render使用ImageInfo作为参数,而CalEngine使用CalInfo作为参数
在具体使用的时候,要针对特定的情况,构造一个合适的对象传递给Print方法
static void Main(string[] args) { var calEngine = new CalEngine(); var render = new Render(); // Usage1, now need print CalEngine calEngine.Print(new CalInfo()); // Usage2, now need print Render render.Print(new ImageInfo()); }
工厂模式推荐将构造实例的地方单独放在子类中实现
修改如下:
public interface ICreator { Information Create(); } public class CalEngine : IPrint, ICreator { public Information Create() { return new CalInfo(); } public void Print() { Console.WriteLine("CalEngine Print" + Create().ToString()); } } public class Render : IPrint, ICreator { public Information Create() { return new ImageInfo(); } public void Print() { Console.WriteLine("Render Print" + Create().ToString()); } }
现在调用者无需根据具体情况,构造特定类型的实例
static void Main(string[] args) { var calEngine = new CalEngine(); var render = new Render(); calEngine.Print(); render.Print(); }
标签:Information,CalEngine,Render,大话,Print,new,设计模式,public From: https://www.cnblogs.com/chenyingzuo/p/16747665.html