设计模式-工厂方法模式(Factory Method Pattern)

工厂方法模式(Factory Method):将创建一个产品的任务,推迟到子类中。核心工厂类不再负责产品的创建。

这样核心类成为一个抽象工厂。负责具体子类工厂必须实现的接口。这样的好处是在不改变具体子类工厂的前提下

增加新的产品。


工厂方法模式角色与结构:

抽象工厂角色(AbstractFactory):是工厂方法模式的核心,创建的子类工厂必须实现这个接口。

具体工厂角色(Concrete Creator):实现抽象工厂的具体工厂类,包含与应用程序密切相关的逻辑,

         并且受到应用程序调用创建产品对象。如ProductAFactory,ProductBFactory

抽象产品角色(Product):工厂方法模式创建的对象的基类或者接口。

具体产品角色(Concrete Product):实现了抽象产品角色的具体类。其对象由具体工厂创建产生。他们之间一般为一一对应。

代码:

/// <summary>
    /// 抽象工厂
    /// </summary>
    public abstract class AbstractFactory
    {
        public abstract Product Factory();
    }


    /// <summary>
    /// 产品A的创建工厂
    /// </summary>
    public class ProductAFactory:AbstractFactory
    {


        public override Product Factory()
        {
            return new ConcreteProductA();
        }
    }


    /// <summary>
    /// 产品B的创建工厂
    /// </summary>
    public class ProductBFactory : AbstractFactory
    {


        public override Product Factory()
        {
            return new ConcreteProductB();
        }
    }


    /// <summary>
    /// 产品抽象类
    /// </summary>
    public abstract class Product
    {
        /// <summary>
        /// 唯一标识
        /// </summary>
        public string ID
        {
            get;
            set;
        }


        /// <summary>
        /// 产品名称
        /// </summary>
       public string Name
        {
            get;
            set;
        }


        public abstract void Operate();


        public  void GetName()
        {
            Console.WriteLine("the name of Product is "+Name);
        }
        
    }


    /// <summary>
    /// 产品A
    /// </summary>
    public class ConcreteProductA : Product
    {
        public override void Operate()
        {
            Console.WriteLine("this is the Class if ConcreteProductA");
        }
    }


    /// <summary>
    /// 产品B
    /// </summary>
    public class ConcreteProductB : Product
    {
        public override void Operate()
        {
            Console.WriteLine("this is the Class if ConcreteProductB");
        }
    }

  class Program
    {
        static void Main(string[] args)
        {
            #region 工厂方法模式


            AbstractFactory factoryA = null; // 工厂A
            Product productA = null; // 产品A
            factoryA = new ProductAFactory();
            productA = factoryA.Factory();
            productA.Name = "ProductA";
            productA.Operate();
            productA.GetName();


            AbstractFactory factoryB = null; // 工厂B
            Product productB = null; // 产品B
            factoryB = new ProductBFactory();
            productB = factoryB.Factory();
            productB.Name = "ProductB";
            productB.Operate();
            productB.GetName();


            return;
       
        }
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值