关于设计模式中创建型模式的一点理解

来源:互联网 发布:mac 安装ie 编辑:程序博客网 时间:2024/05/21 11:04

        这两天在看有关设计模式的东西,首先入手的是创建型模式,包括工厂模式、抽象工厂模式、生成器模式、原型模式和单例模式五种,通过几天的学习,有了一点自己的理解。如何来区分这五种模式呢,我想通过吃饭的例子来说明。

首先我们一般是在家里自己做饭吃的,一般是一个人掌勺,想吃什么就吃什么,但是要事先商量好买好菜,这个就是工厂模式了,一个工厂类,可以设计成能生产多种产品的类,但是在使用时具体生产什么类有用户输入的参数决定,这样好是很好,但是人多了就不好了,我要做很多的菜,可能前面做的凉了,后面的还没做好,并且做这么多,说不定中间就会忘记自己到底做了哪些菜了,工厂模式也是一样,如果用户要用工厂类创建多个对象,就有可能造成混淆,连自己多记不清都要创建什么了,怎么解决这个问题呢?呵呵,很好解决,人多了就上饭店呗。

到了饭店,拿出菜单一看,点菜有两种方式,一种是套餐,你点一种套餐,那么你这次吃饭的主菜和甜点什么的就都给你确定了,你就等着吃就是了,这就是抽象工厂模式,他通过管理七八个厨师,创建的是一个产品族,就像你可以点不同的套餐一样,你也可以利用抽象工厂模式创建不同的产品族,但是每个产品族中的产品是不能改变的。抽象工厂模式就是对工厂模式的进一步包装,主要也是应用于产品族的创建。套餐好是很好,我只要说要哪个套餐,他就会拿我的意思做出来,但是如果这种情况,套餐中有某一道菜有人不喜欢吃或者有某种禁忌,但其他菜又都是很好而其他套餐中有没有的时候,那我不能点这个套餐岂不是他可惜了,那我们就用另一种方式点菜吧

另一种方式就是我就主菜放在一起,甜点放在一起,。。。。,你可以随意点你需要的,但是你必须每种都要点,比且规定主菜要点8个,甜点两个。。。。,这就是生成器模式来了,他与抽象工厂模式的区别在于可以自由组合,更加人性化了,使用范围更广。

当然,假如你到了一个新的环境,你完全不知道该吃什么或者这里什么东西适合你的口味,怎么办呢,哈哈,正好碰到一老乡了,你看他吃的挺香的,如是你对服务员说“给我上和他一摸一样的菜,但是少放点辣椒”,这不就知道吃什么了吗!这就是原型模式,望文生义,即将别人的复制一下拿来自己用,其中可以根据类本身提供的方法对其中的一些特性进行修改,如“少放点辣椒”。

当然你到了一个新的环境时还有一种点菜方式,“老板,你们这里的特色菜是什么?给我上你们的特色菜吧”,哈哈,不幸的是,该店的特色菜是烤全猪,烤全羊,给你上一道你能吃完吗?还好老板也想到了这一点,所以他们一天只做一种,如今天做了烤全猪就不会做烤全羊了,并且由第一个点这道菜的人决定今天特色菜是什么,这样,一整天的客人就吃这道菜了,每点这道菜的人都是从上面切一部分下来吃,这就是单例模式,很容易理解,一个程序中只有该类的一个对象,并且是全局的,之后对该类即使使用的是看似创建的手法,但实际上使用的也是同一个实例。

 

好了,关于这五种模式的理解已经说完了,下面说一下实现方式吧,工厂模式是利用类的抽象完成的,UML如下:

对于抽象工厂模式,它仅仅是对工厂模式进行进一步包装处理,UML图如下:

比较晚了,后面几种模式就不贴图算了,还得自己慢慢画,有时间再补