工厂方法模式

    在工厂方法模式中,核心的工厂类不再负责所有产品的创建,而是将具体创建工作交给子类去做。这个核心类仅仅负责给出具体工厂必须实现的接口,而不接触哪一个产品类被实例化这种细节。这使得工厂方法模式可以允许系统在不修改工厂角色的情况下引进新产品。在Factory Method模式中,工厂类与产品类往往具有平行的等级结构,它们之间一一对应

                               ————TerryLee     

 工厂方法实例:

    /// <summary>    

    /// BaseType为TypeA、TypeB的基类。TypeA、TypeB等是一系列相关的类对象。      

    /// 在有新的类添加时,如TypeC,我们只要添加工厂类FactoryC就可以通过      

    /// BaseFactory类的方法取得具体的类对象。例      

    ///      BaseFactory Factory = new FactoryB();     

    ///      Factory.Create();     

    /// 这样在有新类添加时,就可以做到尽可能少的修改代码。      

    /// </summary>    

    public abstract class BaseFactory

    {

        public abstract BaseType Create();

    }

    public class FactoryA : BaseFactory

    {

        public override TypeA Create()

        {

            return new TypeA();

        }

    }

    public class FactoryB : BaseFactory

    {

        public override TypeB Create()

        {

            return new TypeB();

        }

    }
            工厂类与产品类之间一一对应关系在这表现为:
             FactoryA- BaseType  、 BaseFactory- TypeA 、 FactoryB   - TypeB 
       实例2:
   public interface IMyInterface 
    { void DoSomething();}

    public class A : IMyInterface
    {
        public void DoSomething() { }      
    }
    /// <summary>
    /// 使用Hashtable记录当前存在的类工厂对象
     /// </summary>
    public abstract class MyFactory
    {
        protected abstract IMyInterface Create();
        static Hashtable factories = new Hashtable();
        public static void AddFactory
        (string id, MyFactory f) { factories.Add(id, f); }
        public static IMyInterface CreateClass(string id)
        {
            return (MyFactory)factories.Key[id].Create();
        }
    }
    class FactoryA : MyFactory
    {
        protected IMyInterface Create() { return new A(); }
        public FactoryA()
        {
            if (!MyFactory.factories.ContainsKey["FactoryA"])
            { MyFactory.AddFactory("FactoryA", new FactoryA()); }
        }
    }
    工厂方法模式包含两个思想:其一、工厂类和产品类的一一映射的关系;二、创建对象的方法。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值