简单工厂
因为我实习了有一个月了,所以想把一些公司里面学习的东西记录下来,就想起了写博客。有什么地方写得不好的,请大家见谅。也希望大家多多指教。
最近在公司看设计模式的东西,就先写写我对一些模式的看后心得。
今天要写的是简单工厂。因为它是设计模式里面最简单的,可以说是简单的不算设计模式了。所以先拿它来写。
简单工厂是工厂家族里面最简单的一个设计模式,但是存在必有道理。它也有它的亮点。先来看看它的类图:
它的类图很简单,主要有两部分组成,1简单工厂类, 2产品类。因为根据依赖倒转原则。它使用了一个借口来稳定控制具体的产品类的使用,运用了多态的面向对象技术。而在SimpleFactory类的factory方法里面,有一定的逻辑关系来实例化哪个具体的产品类--Product_A或者Product_B。
C#代码:
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Design_Mode.Simple_Factory { public interface IProduct { void operation(); } }
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Design_Mode.Simple_Factory { class Product_A : IProduct { #region IProduct 成员 public void operation() { Console.Write("Product_A\n"); } #endregion } }
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Design_Mode.Simple_Factory { class Product_B : IProduct { #region IProduct 成员 public void operation() { Console.Write("Product_B\n"); } #endregion } }
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Design_Mode.Simple_Factory { class SimpleFactory { public static IProduct factory(string param) { switch (param) { case "A": return new Product_A(); case "B": return new Product_B(); default: return null; } } } }
using System; using System.Collections.Generic; using System.Linq; using System.Text; using Design_Mode.Simple_Factory; namespace Design_Mode { class Program { static void Main(string[] args) { #region 简单工厂 例子 IProduct product = SimpleFactory.factory("A"); if(product != null) product.operation(); #endregion } } }
优点:通过依赖倒置原则,隐藏了具体产品类。而只暴露出来两个类SimpleFactory和IProduct。SimpleFactory有一定的逻辑处理功能,让用户使用起来更加方便
缺点:当要增加具体产品类是都要修改SimpleFactory类,有点违背了开放封闭原则--对扩展开放,修改封闭。
展望:简单工厂可以和抽象工厂+反射技术结合使用达到更好的高内聚低耦合效果,让封装更极致。