工厂设计模式

工厂设计模式

工厂模式:对象的生成不再直接依赖我们的new关键字,而是交给我们的“工厂”(当然,需要传递参数),是一种解耦的办法,但是也没有做到真正的解耦,如果要做到真正的解耦,就不应该依赖我们的new关键字,这个才是重点,实现的方法

1.将要生成的对象写在配置文件中,通过获取配置文件中的信息,来动态的生成对象。

2.可以考虑使用三方框架,如:spring.net

这里我只做工厂模式的代码演示,让你对工厂模式有一个整理的了解,空了,我会将真正的解耦方式上传

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

namespace Factory001
{
    public abstract class Light
    {
        public abstract void TurnOn();
        public abstract void TurnOff();
    }

    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 Trued on..");
        }
        public override void TurnOff()
        {
            Console.WriteLine("Tube Light is Turned off..");
        }

    }

    public class LightSimpleFactory
    {
        public Light Create(string type)
        {
            if (type == "Bulb")
            {
                return new BulbLight();
            }
            else if (type == "Tube")
            {
                return new TubeLight();
            }
            else
            {
                return null;
            }

            }
    }

    class Program
    {
        static void Main(string[] args)
        {
            //工厂模式:负责将大量有共同接口类的实例化;
            //一个接口  不同实现类;
            //工厂模式可以动态的决定将哪一个类实例化;
            //简单工厂
            //工厂方法
            //抽象工厂;

            //从 net 后台的架构搭建
            //前台 的选择的权衡;使用框架? 自己开发? 插件? 等等的 选择的呀;
            //也就是说 一个接口 有多个实现类;
            //而具体的选择哪个实现 类 交给我们的工厂去决定;

            LightSimpleFactory isf = new LightSimpleFactory();
            Light l = isf.Create("Bulb");
            l.TurnOn();
            l.TurnOff();

            Console.WriteLine("--------------------------");
            l = isf.Create("Tube");
            l.TurnOn();
            l.TurnOff();

            Console.ReadLine();


        }
    }
}

 

posted @ 2015-09-21 14:49  咕-咚  阅读(232)  评论(0编辑  收藏  举报