Single Responsibility Principle 单一职责原则
- 每个类只负责一项职责,因此也只有一个变化点
- 在一个结构体系里,如果经常需要在多个类中同步地做相同的改动,那通常意味着设计不良
- 杜绝“万能类”
class Journal
{
public:
explicit Journal(const string& _title) : title(_title) {
}
void add(const string& entry);
void save(const string& filename);
vectoe<string> entries;
private:
string title;
};
void Journal::add(const string& entry)
{
static int count = 1;
entries.push_back(boost::lexical_cast<string>(count++) + ": " + entry);
}
void Journal::save(const string& filename)
{
ofstream ofs(filename);
for (auto& entry : entries)
ofs << entry << endl;
}
class SaveManager
{
public:
static void save(const Journal& jrnl, const string& filename)
{
ofstream ofs(filename);
for (auto& entry : jrnl.enties)
ofs << entry << endl;
}
};
Open-Closed Principle 开放封闭原则
- 对扩展开放,对更改封闭,也就是说,对于已经编译好的模块不允许再更改(然后进入重新编译、测试的循环),但允许添加新的模块,从而只需要编译新模块然后将其链接进系统
enum class Color {
Red, Green, Blue};
enum class Size {
Small, Medium, Large};
struct Product
{
string name;
Color color;
Size size;
};
class ProductFilter
{
public:
using Items = vector<Product*>;
Items by_color(Items items, Color color)
{
Items result;
for (const auto& item : items)
if (item->color == color)
result.push_back(item);
return result;
}
Items by_size(Items items, Size size)
{
Items result;
for (const auto& item : items)
if (item->size == size)
result.push_back(