模式一(简单工厂)

来源:互联网 发布:手机房源采集软件 编辑:程序博客网 时间:2024/04/20 12:54

根据提供给它的数据,返回几个可能类中的一个实例,通常返回的类是公共的父类,公共的方法或接口。

 

 

工厂类角色:工厂类在客户端的直接控制下创建产品对象

 

抽象产品角色:定义简单工厂创建的对象的父类或它们共同拥有的接口,可以是一个类,抽象类或接口。

 

具体产品角色:定义工厂具体加工出的对象。

 

using System;
using System.Collections.Generic;
using System.Text;

namespace Simple_Factory
{
    /// <summary>
    /// 抽象类
    /// </summary>
    public abstract class Light
    {
        public abstract void TurnOn();
        public abstract void TurnOff();
    }

    /// <summary>
    /// 实体类1
    /// </summary>
    public class BulbLight:Light
    {
        public override void TurnOn()
        {
            Console.WriteLine("Bulb Light is Turned on");
        }

        public override void TurnOff()
        {
            Console.WriteLine("Bulb Light is Turned off");
        }
    }
   
    /// <summary>
    /// 实体类2
    /// </summary>
    public class TubeLight:Light
    {
        public override void TurnOn()
        {
            Console.WriteLine("Tube Light is Turned on");
        }

        public override void TurnOff()
        {
            Console.WriteLine("Tube Light is Turned off");
        }
    }

    /// <summary>
    /// 工厂类
    /// </summary>
    public class LightSimpleFactory
    {
        public Light Create(string LightType)
        {
           switch(LightType)
           {
               case "Bulb": return new BulbLight();
               case "Tube": return new TubeLight();
               default: return null;
           }
        }
    }

    /// <summary>
    /// 客户端
    /// </summary>
    class Program
    {
        static void Main(string[] args)
        {
            LightSimpleFactory lsf = new LightSimpleFactory();
            Light l = lsf.Create("Bulb");
            l.TurnOn();
            l.TurnOff();
        }
    }
}

模式演化:

将工厂放在抽象产品中

 

using System;
using System.Collections.Generic;
using System.Text;

namespace Simple_Factory
{
    public class Light
    {
        public virtual void TurnOn(){}

        public virtual void TurnOff() {}

        public static Light Create(string LightType)
        {
             switch(LightType)
             {
                 case "Bulb": return new BulbLight();
                 case "Tube": return new TubeLight();
                 default: return null;
             }
        }
    }

    public class BulbLight : Light
    {
        public override void TurnOn()
        {
            Console.WriteLine("Bulb Light is Turned on");
        }

        public override void TurnOff()
        {
            Console.WriteLine("Bulb Light is Turned off");
        }
    }

    public class TubeLight : Light
    {
        public override void TurnOn()
        {
            Console.WriteLine("Tube Light is Turned on");
        }

        public override void TurnOff()
        {
            Console.WriteLine("Tube Light is Turned off");
        }
    }

    class Simple_Factory2
    {
        public static void Main()
        {
            Light l = Light.Create("Bulb");
            l.TurnOn();
            l.TurnOff();
        }
    }
}

优点:

工厂类含有必要的判断逻辑,可以决定在什么时候创建哪一个产品类的实例,客户端可以免除直接创建产品对象的责任。

 

缺点:

不利于扩展,如果需要添加产品就不得不修改工厂逻辑。

 

原创粉丝点击