zoukankan      html  css  js  c++  java
  • 设计模式1——抽象工厂

    抽象工厂通过一个工厂产生各种不同的实际对象,并返回基类的指针,通过基类的指针来统一对对象进行操作,增强了其灵活性,降低了耦合,便于后续更新和维护。

    实例代码:

    AbstractFactory.h内容

     1 #ifndef AbstractFactory_H_H
     2 #define AbstractFactory_H_H
     3 
     4 #include <iostream>
     5 using namespace std;
     6 
     7 class Oper
     8 {
     9 public:
    10     Oper(int a0, int b0) : a(a0), b(b0) {}
    11     virtual ~Oper() {}
    12     virtual int getResult() = 0;
    13 
    14 
    15 protected:
    16     int a, b;
    17 };
    18 
    19 class OperAdd : public Oper
    20 {
    21 public:
    22     OperAdd(int a0, int b0) : Oper(a0, b0) {}
    23     virtual int getResult(){
    24         return a+b;
    25     }
    26 };
    27 
    28 class OperSub : public Oper
    29 {
    30 public:
    31     OperSub(int a0, int b0) : Oper(a0, b0) {}
    32     virtual int getResult(){
    33         return a-b;
    34     }
    35 };
    36 
    37 class AbstractFactory
    38 {
    39 public:
    40     static Oper* create(int a0, int b0, char ch){
    41         Oper *oper = NULL;
    42         switch(ch){
    43         case '+': oper = new OperAdd(a0, b0); break;
    44         case '-': oper = new OperSub(a0, b0); break;
    45         }
    46         return oper;
    47     }
    48 };
    49 
    50 
    51 void AbstractFactoryTest()
    52 {
    53     int a = 4, b = 3;
    54     //Oper *oper = NULL;
    55     cout << AbstractFactory::create(a, b, '+')->getResult() << endl;
    56     cout << AbstractFactory::create(a, b, '-')->getResult() << endl;
    57 }
    58 
    59 
    60 #endif

    具体运行在main函数中调用AbstractFactoryTest()即可。

  • 相关阅读:
    🍖权限管理之高级权限 ACL
    C#中的interface没那么简单【转】
    URL与物理文件的分离【转】
    共享工作簿
    关于runas explorer.exe 的问题
    但愿汶川早日恢复平静但愿灾区人民早日重建家园!
    正确删除系统隐藏的设备
    vim配置文件.vimrc
    outlook中的邮件归档
    Windows 系统环境变量
  • 原文地址:https://www.cnblogs.com/MiniHouse/p/3974451.html
Copyright © 2011-2022 走看看