设计模式原则
2019-04-14 16:49
74 查看
六大原则
1.开闭原则:对拓展开放,对修改关闭。对程序进行拓展的时候,通过增加代码来实现,不修改原有代码。
举个例子:例如如果要写一个加法计算器,可以定义一个类输入两个数和符号,但这样如果要增加新的运算就要修改内部代码。
因此要做的是采用多态,每一个运算都继承同一个父类(接口),使得如果要增加功能,只需要继承父类重新编写一个类就行,达到拓展的目的。
#include <iostream> using namespace std; //接口类,可以定义多个接口类,用接口隔离原则 class caculation{ public: virtual void setPara(int a,int b)=0; virtual int getResult() = 0; }; class pluscaCulation:public caculation{ public: virtual void setPara(int a,int b){ this->mA = a; this->mB = b; } virtual int getResult(){ return mA+mB; } private: int mA; int mB; }; class multcaCulation:public caculation{ public: virtual void setPara(int a,int b){ this->mA = a; this->mB = b; } virtual int getResult(){ return mA*mB; } private: int mA; int mB; }; void test01(){ caculation *cal = new pluscaCulation; cal->setPara(10,20); cout<<cal->getResult()<<endl; delete cal; }; int main() { test01(); return 0; }
2.迪米特法则:
设计一个数据系统,然后另一个要调用,不能直接将这个系统提供出去,最好再设计一个类,用来作为中介接口,来对数据系统进行读取。
3.里氏代换原则:多态,一个父类指针可以指向所有子类对象。任何父类都可以被子类代替且不受影响。
4.依赖倒转原则:多个类之间不要过度依赖,也就是一个类的输入类型最好不要是另一个类,最好是另一个类的接口类(就是那个多个类的父类作为接口),这样所有的同一个接口的类,就可以都输入到这个类中。
#include <iostream> using namespace std; //用接口完成功能 class Abstract{ public: virtual void dobusiness()=0; }; class saveStaff:public Abstract{ virtual void dobusiness(){ cout<<"办理存款业务"<<endl; } }; class getStaff:public Abstract{ virtual void dobusiness(){ cout<<"办理取款业务"<<endl; } }; //中间层,以接口为输入 void treatbank(Abstract *p){ p->dobusiness(); } void test(){ Abstract *p = new saveStaff; treatbank(p); delete p; } int main(){ test(); return 1; }
5.合成复用原则:尽量使用组合而不是继承
#include <iostream> using namespace std; class carType{ public: virtual void run() = 0; }; class dazhong: public carType{ public: virtual void run(){ cout<<"I am running dazhong car."<<endl; } ~dazhong(){ cout<<"delete dazhong"<<endl; } }; class tuolaji: public carType{ public: virtual void run(){ cout<<"I am running tuolaji."<<endl; } ~tuolaji(){ cout<<"delete tuolaji"<<endl; } }; class person{ public: person(){ cout<<"start"<<endl; } void setcar(carType *car){//在这使用的组合,输入进的为一个类。 this->car = car; } void doufeng(){ car->run(); } ~person(){ if(this->car!= nullptr){ delete this->car; } } private: carType *car; }; void test01(){ person *p = new person; p->setcar(new dazhong); p->doufeng(); p->setcar(new tuolaji); p->doufeng(); delete p; } int main() { test01(); return 1; }
相关文章推荐
- 设计模式-模式和原则
- [设计模式]面向对象的六大原则
- 设计模式---六大原则
- 设计模式六大原则(1):单一职责原则
- 设计模式的原则和策略
- DRY原则和设计模式
- 设计模式六大原则(1):单一职责原则
- 设计模式的六大原则
- 设计模式六大原则(1):单一职责原则
- 面向对象程序的设计原则--Head First 设计模式笔记
- 多次被坑了后,重温设计模式原则
- 设计模式六大原则(1):单一职责原则
- 深入探讨超越设计模式之外的设计原则
- 设计模式六大原则
- 举例说明Java设计模式编程中ISP接口隔离原则的使用
- 移动架构26_设计模式六大原则四:依赖倒置原则
- 设计模式--工厂模式.策略模式.单一职责原则.开放封闭原则.依赖倒转原则
- 23种设计模式-6大设计原则
- 23种设计模式之6大原则
- java 设计模式六大原则(1):单一职责原则