码迷,mamicode.com
首页 > 其他好文 > 详细

创建型模式(二)工厂模式

时间:2015-11-21 15:51:54      阅读:149      评论:0      收藏:0      [点我收藏+]

标签:

 

一句话的概要

把具体实现推迟到子类中,工厂类不在负责产品的创建,只是给出具体工厂必须实现的接口。

剧情

上篇说过,简单工厂的方法其实是违反了设计原则的。所以我们就把味多美这个工厂类抽象一下,并且派生专门做某种蛋糕的工厂。

这样在添加新的程序的时候就不会再需要修改味多美这个工厂类了。

回顾一下剧情:

小明是高中的小屌丝,她喜欢隔壁班的女神王小花。结果迟迟不敢表白。

今天正好赶上王小花的生日,小明打算买去味多美个蛋糕给她吃,讨好一下。但是这次小明知道一个专门做黑森林蛋糕的味多美。打算去这家味多美去买。

任务一:修改味多美工厂类

首先任何味多美都会卖蛋糕,区别只是是不是专卖。所以我们把卖蛋糕这个方法进行一下抽象操作

public abstract class WeiDuoMei {
        public abstract Cake Buy();
    }

接下来,我们创建两个专卖店。一个是黑森林专卖,一个是天使蛋糕专卖

public class BlackForestWeiDuoMei : WeiDuoMei
    {
        public override Cake Buy()
        {
            return new BlackForestCake();
        }
    }

    public class AngleWeiDuoMei : WeiDuoMei
    {
        public override Cake Buy()
        {
            return new AngleCake();
        }
    }

这样工厂类的修改就完成了,再添加新的专卖店就不会进行修改了。接着,我们修改一下小明同学的方法

public class SomeMing {
        //讲话
        public void Speak(string strText)
        {
            Console.WriteLine("小明说:" + strText);
        }
        //买蛋糕
        public void BuyCake()
        {
            WeiDuoMei wdm = new BlackForestWeiDuoMei();
            Cake cake = wdm.Buy();
            cake.Eat();
        }
    }

小明同学初始一个黑森林蛋糕专卖店,接着在这个专卖店进行购买操作。此时方法实现就已经推迟到子类操作了。

这就是工厂模式。

总结

工厂模式把实现产品方法推迟到了子类。符合设计原则中的开闭原则。

常用场景:希望用户指定工厂和产品。不同的工厂和产品可以提供不同的功能。

选择关键点:工厂和产品类是否同生共灭

By~

 

创建型模式(二)工厂模式

标签:

原文地址:http://www.cnblogs.com/chenxygx/p/4983743.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!