什么是设计模式
设计模式就是面向对象编程中常见问题的解决方案,由面向对象编程技术发展至今的熟练设计者累积的经验以供初学者和其他设计者总结掌握。是为了解决某类重复出现的问题而出现的一套成功或有效的解决方案。
目前设计模式于己经应用与每个公司的各个项目中,设计模式使代码编写过程真正实现工程化,可以解决很多开发过程中的问题例如分工合作,需求变更。
设计模式基本原则
1.开放封闭原则
在开发过程中,需求的变化如果要通过修改原有的代码来完成,那么就很可能将新的错误引入到旧的代码中。因此才有了开放封闭原则。就是说,需求改变时,我们应该尽量通过加入新代码而不是修改源代码的方式来实现变化。
2.里氏代换原则
里氏代换原则告诉我们,只要父类出现的地方,子类就可以出现,替换为子类后不会产生任何错误和异常,当然反过来未必适应
3.依赖倒转原则
这个原则是开闭原则的基础,针对接口编程,依赖于抽象而不依赖于具体。传变量或者传参数,尽量使用抽象类,或者接口。
4.接口隔离原则
使用多个相互隔离的接口开发,比使用单个接口要好。目的是为降低类之间的耦合度。
5.迪米特法则/最少知道原则
一个实体应当尽量少地与其他实体之间发生相互作用,使得系统功能模块相对独立。
6.合成复用原则
尽量使用合成/聚合的方式,而不是使用继承。/?******暂时不懂
简单工厂模式
- 将需要创建的各种不同对象(例如各种不同的Chart对象)的相关代码给封装到不同的类中,这些类称为具体产品类。
- 将他们公共的代码进行抽象和提取后封装在一个抽象产品类中,每一个具体产品类都是抽象产品类的子类。
- 提供一个工厂类用于创建各种产品,在工厂类中提供一个创建产品的工厂方法,该方法可以根据所传入的参数不同创建不同的具体产品对象。
- 客户端只需要调用工厂类的工厂方法并传入相应的参数即可得到一个产品对象。
下面例子是实现一个简单计算器
#include <iostream>
#include <string>
using namespace std;
class Cal //抽象产品类:单目运算计算器
{
public:
virtual int get_result(int m_a,int m_b) = 0;
};
class Add :public Cal //具体产品累:运算符
{
public:
virtual int get_result(int m_a,int m_b)
{
return m_a+m_b;
}
};
class Sub :public Cal
{
public:
virtual int get_result(int m_a,int m_b)
{
return m_a-m_b;
}
};
class Mul :public Cal
{
public:
virtual int get_result(int m_a,int m_b)
{
return m_a*m_b;
}
};
class Div :public Cal
{
public:
virtual int get_result(int m_a,int m_b)
{
return m_a/m_b;
}
};
class Rem :public Cal
{
public:
virtual int get_result(int m_a,int m_b)
{
return m_a%m_b;
}
};
class FactortOpreadtor //工厂类:运算符工厂
{
public:
static Cal * creatCal (string op) //静态工厂方法
{
Cal *cal;
if(op == "+")
{
cal = new Add();
}
if(op == "-")
{
cal = new Sub();
}
if(op == "*")
{
cal = new Mul();
}
if(op == "/")
{
cal = new Div();
}
if(op == "%")
{
cal = new Rem();
}
return cal;
}
};
int main()
{
Cal * cal ;
int a;
int b;
cout<<"输入运算数1:";
cin >>a ;
cout<<"输入运算数2:";
cin >>b ;
string op;
cout<<"输入运算符:";
cin >> op;
cal = FactortOpreadtor::creatCal(op); //调用工厂方法实例化相应的具体运算符类
cout << cal->get_result(a,b)<<endl;
return 0;
客户端测试