1.设计模式的原则
1.1 单一职责原则
顾名思义,对于一个类来讲,一个类只负责一个职责(对于一个函数来讲,一个函数也尽可能的完成一个功能),如果类A负责两个职责分别是:职责1和职责2,那么当职责1的需求变动从而需要修改类A,可能会造成职责2执行错误,因此需要将类A的粒度分解为A1,A2.
单一职责的优点1)可以降低类的复杂程度 2)可以提高类的可读性和维护性
3)降低因为业务修改带来的风险
1.2 接口隔离原则
将臃肿庞大的接口拆分成更小和更具体的接口。要为各个类建立它们需要的专用接口,而不要试图去建立一个庞大的接口供所有一类它的类去调用。
// 原实现:
class Bird
{
public:
virtual ~Bird() = default;
virtual void fly() = 0;
virtual void eat() = 0;
virtual void run() = 0;
virtual void move() = 0;
};
class Sparrow : public Bird
{
public:
void fly() override {}
void eat() override {}
void run() override {}
void move() override {}
};
class Penguin : public Bird
{
public:
void fly() override
{
// 本来不需要这个接口,但是继承了fly(),还是要实现
}
void eat() override {}
void run() override {}
void move() override {}
};
//修改
class Lifeform
{
public:
virtual void eat() = 0;
virtual void move() = 0;
};
class Flyable
{
public:
virtual void fly() = 0;
};
class Audible
{
public:
virtual void makeSound() = 0;
};
class Sparrow : public Lifeform, public Flyable, public Audible
{
public:
//...
};
class Penguin : public Lifeform, public Audible
{
public:
//...
};
1.3 依赖倒转原则
依赖倒置原则:依赖于抽象(接口),不依赖于具体的实现(类),也就是针对接口编程。
//示例
#include <iostream>