工厂模式

       之前找了几本书尝试了解一下设计模式,发现很少有用C++的,看了几篇别的语言写的,觉得很难理解其精髓。后来就开始自己找博客看,看过的博客可能来自不同的人, 以此粗劣标记一下,方便以后复习,待到自己哪天有很深地理解了,再自己重写一遍吧!
 
 
【创建型模式】:抽象工厂模式工厂方法模式、创建者模式、原型模式、单例模式
 
工厂模式
        工厂模式可分为简单工厂模式、工厂方法模式以及抽象工厂模式。
        工厂模式最主要的功能:
              定义创建对象的接口,封装对象的创建。
              使得具体化类的工作延迟到子类中。
 
    对功能的讲解见:C++工厂模式_微学苑(编程第一站)http://www.weixueyuan.net/view/1254.html
 
(1)简单工厂模式:
     定义一个产品基类包含公共属性,然后各种产品创建类继承其基类产品,最后推迟至工厂类中实现根据需要调用各产品创建类。
    代码可见:C++设计模式——简单工厂模式 | 果冻想 http://www.jellythink.com/archives/42
 
(2)工厂方法模式
     简单工厂模式里具体有多少类在其工厂类中是写死的,不利于扩展。因此工厂方法类可以创建工厂类基类,然后各种产品工厂实现类可以继承其工厂基类,单独创建各种产品工厂基类。在实现时可以根据需要创建对应的产品工厂类,然后由它转去调用产品类从而创建产品。这样想扩展产品时,只要实现两个类:产品类以及工厂实现类。
      代码见:C++设计模式——工厂方法模式 | 果冻想http://www.jellythink.com/archives/62
 
(3)抽象工厂方法
      工厂方法中只有一类产品,各个子类可看做是这类产品的不同分类,而抽象方法可产生多类产品,并且根据不同类产品的不同分类间的联系将它们包装为一个工厂方法。
     举个例子来说:一个显示器电路板厂商,旗下的显示器电路板种类有非液晶的和液晶的;这个时候,厂商建造两个工厂,工厂A负责生产非液晶显示器电路板,工厂B负责生产液晶显示器电路板;工厂一直就这样运行着。有一天,总经理发现,直接生产显示器的其余部分也挺挣钱,所以,总经理决定,再建立两个工厂C和D;C负责生产非液晶显示器的其余部件,D负责生产液晶显示器的其余部件。此时,旁边参谋的人就说了,经理,这样做不好,我们可以直接在工厂A中添加一条负责生产非液晶显示器的其余部件的生产线,在工厂B中添加一条生产液晶显示器的其余部件的生产线,这样就可以不用增加厂房,只用将现有厂房进行扩大一下,同时也方便工厂的管理,而且生产非液晶显示器电路板的技术人员对非液晶显示的其余部件的生产具有指导的作用,生产液晶显示器电路板也是同理。总经理发现这是一个不错的主意。
   也就是:显示器电路板是一类产品,显示器的其余部分是另一类产品。它们都有液晶和非液晶的分类。这样,根据是液晶的,把生产显示器电路板和显示器的其余部分两类相关系的产品放到一个工厂中。
    代码见:C++设计模式——抽象工厂模式 | 果冻想http://www.jellythink.com/archives/75
   
     感觉C++中是通过虚函数来以及将子类赋值给基类指针实现的,Java里好像是通过接口的。

posted on 2016-04-03 18:09  RenewDo  阅读(110)  评论(0编辑  收藏  举报

导航