设计模式实例与代码:Factory Method模式

意图/定义:定义一个用于创建对象(产品)的(工厂)接口,让子类(具体工厂)决定实例化哪一个类(产品)。将实例化推迟到子类。

问题:一个类需要实例化另一个类的子类,但不知道是哪一个。工厂方法允许子类进行决策。

解决方案:让派生类对实例化哪个类和如何实例化类进行决策

参与者与协作者:Produect是工厂所要创建的类型的接口。而Creator是定义工厂的接口。

效果:客户需要继承Creator以创建一个特定的具体工厂以生产具体产品。

实现:在抽象类中使用一个抽象方法。需要实例化一个被包含对象时,抽象类的代码引用此方法,但是不知道需要的对象是哪个。


下面以不同的人去KFC或者去McDonald吃快餐为例来说明工厂方法的使用,因为KFC和MD都生产自己的薯条,但各有特色。一个人可能根据自己的喜好,决定点哪家的薯条。


using System;

namespace FactoryMethod
{
    /// <summary>
    /// MainApp startup class for Structural
    /// Factory Method Design Pattern.
    /// </summary>
    class MainApp
    {
        /// <summary>
        /// Entry point into console application.
        /// </summary>
        static void Main()
        {
            // An array of creators
            Creator[] creators = new Creator[2];

            creators[0] = new KFC_Creator();
            creators[1] = new MD_Creator();

            // Iterate over creators and create products
            foreach (Creator creator in creators)
            {
                Product product = creator.FactoryMethod();
                Console.WriteLine("Created {0}",product.GetType().Name);
            }

            // Wait for user
            Console.ReadKey();
        }
    }

    /// <summary>
    /// The 'Product' abstract class
    /// </summary>
    abstract class Product
    {
    }

    /// <summary>
    /// A 'ConcreteProduct' class
    /// </summary>
    class KFC_Chips : Product
    {
    }

    /// <summary>
    /// A 'ConcreteProduct' class
    /// </summary>
    class MD_Chips : Product
    {
    }

    /// <summary>
    /// The 'Creator' abstract class
    /// </summary>
    abstract class Creator
    {
        public abstract Product FactoryMethod();
    }

    /// <summary>
    /// A 'ConcreteCreator' class
    /// </summary>
    class KFC_Creator : Creator
    {
        public override Product FactoryMethod()
        {
            return new KFC_Chips();
        }
    }

    /// <summary>
    /// A 'ConcreteCreator' class
    /// </summary>
    class MD_Creator : Creator
    {
        public override Product FactoryMethod()
        {
            return new MD_Chips();
        }
    }
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值