标签:
在开始设计模式不可避免的提到几个面向对象设计原则:1、开闭法则(OCP);2、里氏代换法则(LSP);3、依赖倒置法则(DIP);4、接口隔离法则(ISP);5、合成/聚合复用原则(CARP);6、迪米特法则(LoD)。使用设计模式的目的并非是为了目标的简单化,甚至在某些场景下,过度的使用设计模式会使问题复杂化。在本人看来,设计模式的存在就是为了更好的解决以上6个面向对象设计原则。对于以后的随笔中,我将会在适合的时候对以上设计原则适当的进行阐述。
写下这些东西的目的主要在于总结,本人才疏学浅不敢误人子弟。
简单工厂模式是一种很简单的创建型模式,主要为创建对象提供接口。主要有三种角色组成:
工厂类:这是本模式的核心,含有一定的商业逻辑和判断逻辑。往往由一个具体类实现。
抽象产品:它一般是具体产品继承的父类或者实现的接口。可由接口或者抽象类来实现。
具体产品:工厂类所创建的对象就是此角色的实例。由一个具体类实现。
可以看出Client有一个对抽象产品IProduct接口以及工厂类的引用,在使用了简单工厂之后,Client不再依赖于具体产品Product的实现。只需要调用Factory的CreateProduct方法即可获取到一个IProduct的引用。
直接上代码:
class Client { Factory factory = new Factory(); IProduct product = null; public void InitialProduct(string productName) { product = factory.CreateProduct(productName); } public void Run() { if (product != null) product.PrintName(); } } class Factory { public IProduct CreateProduct(string productName) { if (productName == "A") return new ProductA(); else if (productName == "B") return new ProductB(); else throw new Exception("产品名称错误!"); } } interface IProduct { void PrintName(); } class ProductA:IProduct { public void PrintName() { Console.WriteLine("Product A"); } } class ProductB:IProduct { public void PrintName() { Console.WriteLine("Product B"); } } class Program { static void Main(string[] args) { Client client = new Client(); client.InitialProduct("A"); client.Run(); client.InitialProduct("B"); client.Run(); Console.ReadKey(); } }
如果在后续的扩展中需要添加ProductC,则只需要修改Factory的CreateProduct实现即可,即实现了解耦。
运行效果:
标签:
原文地址:http://www.cnblogs.com/Jason-han/p/4550113.html