这段时间准备着实习招聘,把以前懂一丢丢的设计模式又拿出来看看,这次看的书,主要是《大话设计模式》,偶尔翻一翻经典的《设计模式》。这几天看的是简单工厂模式、工厂方法模式、抽象工厂模式、策略模式。觉得它们有相似之处,所以在这里写下感想。如有错误,敬请指正(如果有人看的话✧(≖ ◡ ≖✿))
简单工厂模式
①几个子类继承基类的方法,并且各自实现。
②工厂类根据客户端传入的参数,生成对应的子类并且返回客户端。
③客户端定义的基类的指针指向生成的子类,由这个指针去调用具体方法,实现功能
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109
| * EasyFactory.cpp * * Created on: 2016年3月11日 下午10:55:57 * Author: Wayne 13186259527@163.com */
简单工厂模式 实现简单的加减乘除 */ #include <iostream> #include<stdlib.h>
using namespace std;
class Operation { public: Operation() { }
virtual double Calc(double x, double y) { return 0; } ;
~Operation() { } }; class Add: public Operation { public: Add() { } ; double Calc(double x, double y) { return x + y; } ~Add() { } }; class Sub: public Operation { public: Sub() { } ; double Calc(double x, double y) { return x - y; } }; class Mul: public Operation { public: Mul() { }; double Calc(double x, double y) { return x * y; } }; class Div: public Operation { public: Div() { }; double Calc(double x, double y) { if (y == 0) { cout << "0不能作为被除数" << endl; exit(0); } return x / y; } };
class Factory { public: Factory() { } static Operation * Count(char c) { Operation *q = NULL; switch (c) { case '+': q = new Add(); break; case '-': q = new Sub(); break; case '*': q = new Mul(); break; case '/': q = new Div(); break; } return q; } }; int main(void) { cout << "请输入算式:" << endl; cout << "eg:5+8" << endl; double x, y; char c; cin >> x >> c >> y; double result; Operation *p = Factory::Count(c); result = p->Calc(x, y); cout << "result = " << result << endl; return 0; }
|