一:简单工厂模式
1,概念
简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。顾名思义工厂就是生产东西的,有原料(参数),模子(对象)就能生产出很多个具有相同功能的对象啦。
2,uml图
3,代码示例
- <span style="font-size:18px;"> class Program
- {
- static void Main(string[] args)
- {
- Operate oper; //创建Operate类的oper类
- oper = OperationFactoty.createOperate("+"); //运用简单工厂判断实力化的对象
- oper.NumberA = 1; //赋值
- oper.NumberB = 2;
- double result = oper.GetResult();
- Console.WriteLine(result); //显示运算结果
- }
- }
- //简单工厂,通过判断参数,实例化相应的对象
- public class OperationFactoty
- {
- public static Operate createOperate(string operate)
- {
- Operate oper = null;
- switch (operate){ }
- return oper;
- }
- }
- //定义一个运算基类,包含GetResult虚方法
- public class Operate //定义一个运算类
- {
- private double numberA=0; //运算前的数
- private double numberB=0; //运算后的数
- public double NumberA{ }
- public double NumberB{ }
- public virtual double GetResult()//返回运算后结果的方法
- {
- return result; //返回结果
- }
- }
- // 运算类的四个继承类,分别实现加减乘除四个运算
- public class NumberAdd : Operate //加运算
- {
- public override double GetResult()//实现基类中的虚方法
- {
- double result = NumberA + NumberB;
- return result;
- }
- }
- public class NumberSub:Operate //减运算
- {
- public override double GetResult(){ }
- }
- public class NumberMul:Operate //乘运算
- {
- public override double GetResult(){ }
- }
- public class NumberDiv:Operate //除运算
- {
- public override double GetResult(){ }
- }</span>
4,总结
简单工厂模式,我把它理解为一个模子,根据外界给定的原料,在加上自身封装好的判断,生产出不同类型的相应的产品、对象。
简单工厂模式使用场景:工厂类负责创建的对象比较少;客户只知道传入工厂类的参数,对于如何创建对象(逻辑)不关心;简单工厂很容易违反高内聚低耦合原则,因此一般只在很简单的情况下应用。
二:工厂方法模式
1,概念
是定义一个创建产品对象的工厂接口,让子类决定实例化哪一个类,将实际创建工作推迟到子类当中。
2,uml图
3,代码实例
(1)工厂方法实现
- <span style="font-size:18px;"> class Program
- {
- static void Main(string[] args)
- {
- IFactory factory = new UndergraduateFactory(); //由接口创建新的学雷锋大学生
- LeiFeng student = factory.CreateLeifeng(); //实例化
- student.BuyRice();
- student.Sweep();
- student.Wash();
- }
- }
- //雷锋类,定义了一些功能
- class LeiFeng
- {
- public void Sweep(){ } //擦桌子
- public void Wash(){ } //洗衣服
- public void BuyRice(){ } //买米
- }
- //学雷锋的大学生
- class UnderGraduate : LeiFeng{ }
- //社区志愿者
- class Volunteer : LeiFeng{ }
- //雷锋工厂
- interface IFactory //定义一个接口,实现创建雷锋类的功能
- {
- LeiFeng CreateLeifeng();
- }
- class UndergraduateFactory : IFactory//学雷锋大学生工厂
- {
- public LeiFeng CreateLeiFeng()
- {
- return new UnderGraduate();
- }
- }
- class VolunteerFactory : IFactory//社区志愿者工厂
- {
- public LeiFeng CreateLeiFeng()
- {
- return new Volunteer();
- }
- }</span>
(2)简单工厂实现
- <span style="font-size:18px;"> class Program
- {
- static void Main(string[] args)
- {
- LeiFeng studentA = SimpleFactory.CreateLeiFeng("学雷锋的大学生");//用简单工厂创建并实例化学雷锋的大学生
- studentA.BuyRice();
- LeiFeng studentB = SimpleFactory.CreateLeiFeng("社区志愿者");//用简单工厂创建实例化社区志愿者
- studentB.BuyRice();
- }
- }
- //雷锋类,定义了一些功能
- class LeiFeng
- {
- public void Sweep(){ } //擦桌子
- public void Wash(){ } //洗衣服
- public void BuyRice(){ } //买米
- }
- //简单工厂类
- class SimpleFactory
- {
- public static LeiFeng CreateLeiFeng(string type)
- {
- LeiFeng result = null;
- switch (type) //判断选择要创建对象的类型
- {
- case "学雷锋的大学生":
- result = new UnderGraduate();
- break;
- case "社区志愿者":
- result = new UnderGraduate();
- break;
- }
- return result;
- }
- }</span>
4,总结
工厂方法模型中,“工厂”创建的是还没有分化好的对象,其中没有逻辑判断相比于简单工厂模式,基类工厂去实现接口,子工厂去实现判断并能生产出相应功能的对象。
三:简单工厂和工厂方法模式的比较
1,简单工厂模式
专门定义一个工厂类负责创建其他类的实例,最大的优点在于工厂类中包含了必要的逻辑,根据客户需要的条件动态实例化相关的类
2,工厂方法模式
创建对象的接口,让子类去决定具体实例化的对象,把简单的内部逻辑判断移到了客户端代码。工厂方法克服了简单工厂违背开放-封闭原则的缺点,又保持了封装对象创建过程的优点。
原文地址:http://blog.csdn.net/lishuangzhe7047/article/details/8491269