“创建型模式”的应用

创建型模式的工作原理
创建型模式隐藏了类的实例的创建细节,通过隐藏对象如何被创建和组合在一起达到使整个系统独立的目的。 创建型模式分为:工厂方法模式(Factory Method)、抽象工厂模式

(Abstract Factory)、建造者模式(Builder)、原型模式(Prototype)、单例模式(Singleton)等五类。


本文以Factory Method 模式为例,阐述工厂方法模式的工作原理:

工厂方法模式(Factory Method Pattern):也叫虚拟构造器(Virtual Constructor)模式或者多
态工厂(Polymorphic Factory)模式,在工厂方法模式中,工厂父类负责定义创建产品对象的
公共接口,而工厂子类则负责生成具体的产品对象,这样做的目的是将产品类的实例化操作
延迟到工厂子类中完成。它的 UML 类图如下:

工厂方法模式包含如下角色:
 Product:抽象产品
 ConcreteProduct:具体产品
 Creator:抽象工厂
 Concrete Creator:具体工厂

Factory Method 模式的特点为当系统扩展需要添加新的产品对象时,仅仅需要添加一个 具体产品对象以及一个具体工厂对象,原有工厂对象不需要进行任何修改,也不需要修改客户端,很好地符合了“开闭原则” 。

应用实例:

用 Factory Method 模式设计一个饮料工厂的模拟程序:要求为每种品牌的饮料提供一个子工厂,如:芒果汁工厂专门负责生产芒果汁,苹果汁工厂专门负责生产苹果汁,如果需要生产桃子汁或菠萝汁,只需要对应增加一个新的桃子汁工厂或菠萝汁工厂即可,原有的工厂无须做任何修改,使得整个系统具有更加的灵活性和可扩展性。


命名空间为DrinkFactorySample:

1. 抽象产品类Drink(饮料类)

namespace DrinkFactorySample
{
     public interface Drink  //可以是一个接口,也可以是一个抽象类
    {
      void drink();
     }

}

2. 具体产品类MangguoDrink(芒果汁饮料类)
namespace DrinkFactorySample
{
    public class MangguoDrink : Drink
    {
        public void drink()
        {
            Console.WriteLine("芒果汁饮料正在被人们饮用");
        }
    }
}

3. 具体产品类AppleDrink(苹果汁饮料类)

namespace DrinkFactorySample
{
    public class AppleDrink : Drink
    {
        public void drink()
        {
            Console.WriteLine("苹果汁饮料正在被人们饮用");
        }
    }

}

4. 抽象工厂类DrinkFactory(饮料工厂类)

namespace DrinkFactorySample
{
    public interface DrinkFactory  //可以是一个接口,也可以是一个抽象类
    {
      Drink produceDrink();
    }
}
5.具体工厂类MangguoDrinkFactory(芒果汁饮料工厂类)

namespace DrinkFactorySample
{
    public class MangguoDrinkFactory : DrinkFactory 
    {
        public Drink produceDrink() 
        {
        //生产饮料
	Console.WriteLine("芒果汁工厂正在生产芒果汁饮料");
        Drink DDrink = new MangguoDrink();
        return DDrink;
    }	
    }
}
6.具体工厂类AppleDrinkFactory(苹果汁饮料工厂类)
namespace DrinkFactorySample
{
    public class AppleDrinkFactory : DrinkFactory
    {
        public Drink produceDrink()
        {
            //生产饮料
            Console.WriteLine("苹果汁工厂正在生产苹果汁饮料");
            Drink DDrink = new AppleDrink();
            return DDrink;
        }
    }
}

7.测试: 测试类Client:

namespace DrinkFactorySample
{
    class Client
    {
        static void Main(string[] args)
        {    
                DrinkFactory factory;
                Drink drinks;
                factory = new MangguoDrinkFactory();
                drinks = factory.produceDrink();
                drinks.drink();
                Console.Read();  
        }
    }
}
运行结果:











评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值