zoukankan      html  css  js  c++  java
  • 简单工厂模式

    简单工厂模式

    简单工厂模式是类的创建模式,又叫做静态工厂方法模式。就是由一个工厂类根据传入的参量决定创建出哪一种产品类的实例。一般涉及到三种角色:

    工厂类:担任这个角色的是工厂方法模式的核心,含有与应用紧密相关的商业逻辑。工厂类在客户端的直接调用下创建产品对象,它往往由一个具体的类实现。 
    抽象产品角色:担任这个角色的类是由工厂方法模式所创建的对象的父类,或她们共同拥有的接口。一般由接口抽象类实现。 
    具体产品角色:工厂方法模式所创建的任何对 象都是这个角色的实例,由具体类实现。 


    简单工厂模式优缺点: 
    模式的核心是工厂类,这个类负责产品的创建,而客户端可以免去产品创建的责任,这实现了责任的分割。但由于工厂类集中了所有产品创建逻辑的,如果不能正常工作的话会对系统造成很大的影响。如果增加新产品必须修改工厂角色的源码。

     1 #define win 0
     2 #define mac 1
     3 #include <iostream>
     4 using namespace std;
     5 
     6 class button     //抽象基类   类似于接口 
     7 {
     8 public:
     9     button(){}
    10     virtual void createbutton()=0;
    11 };
    12 
    13 class macbutton : public button
    14 {
    15 public:
    16     macbutton(){}
    17     virtual void createbutton(){cout<<"macbutton"<<endl;}
    18 };
    19 class winbutton : public button
    20 {
    21 public:
    22  winbutton(){}
    23  virtual void createbutton(){cout<<"winbutton"<<endl;}
    24 };
    25 
    26 class simplefactory
    27 {
    28 public:
    29     simplefactory(){}
    30     button *createproduct(int ID);    //返回值是抽象基类的指针 
    31     button *createmacproduct();
    32     button *createwinproduct();
    33 };
    34 
    35 button *simplefactory::createproduct(int ID)
    36 {
    37     if (ID==win)
    38         return new winbutton;       //直接返回new<T> 
    39     if (ID==mac)
    40         return new macbutton;
    41 }
    42 
    43 button *simplefactory::createwinproduct()
    44 {
    45     return new winbutton;
    46 }
    47 
    48 button *simplefactory::createmacproduct()
    49 {
    50     return new macbutton;
    51 }
    52 
    53 int main()
    54 {
    55     simplefactory fc;    //声明或创建一个工厂 
    56     button *bt=fc.createproduct(win);   //用工厂生产 生产是个指针 
    57     bt->createbutton();
    58     delete bt;
    59     return 0;
    60 }

    代码改自http://www.cnblogs.com/tiandsp/archive/2012/06/24/2560106.html

    要点 http://www.cnblogs.com/sadys/archive/2006/05/10/395869.html

  • 相关阅读:
    VScode中Python的交互式命令环境使用笔记
    jmeter beanshell判断响应的json串,参数的值是否正确;
    类和类的继承 实现关系;
    类与类依赖关系,实例;
    类与类包含关系,实例;
    java中有package的编译执行;java编译乱码;
    java 类与类之间的关系,方法重写与方法重载的区别
    beanshell sampler构造响应数据;
    Scanner类及其中方法的使用;
    java 构造方法 代码块 this
  • 原文地址:https://www.cnblogs.com/whzlw/p/3778625.html
Copyright © 2011-2022 走看看