在开发新的功能时我们常常会提到开闭原则,即一个类对于拓展是开放的,对于修改是关闭的,"open for extension but closed for modification"。有人可能会问拓展一个类的功能不就是要修改这个类吗?那开闭原则怎么会成立呢? 我的理解是当我们需要给一个类添加新的功能的时候,最好的办法不是直接修改这个类的代码,应该考虑用一个新类去实现新的功能。最终的效果是一系列相关的功能都有自己的类,而这些类都继承同一个父类。
我们来看一个例子,假设有一种产品,有三个属性,名称,颜色,大小。定义在product.hpp,如下所示
#pragma once
#include <iostream>
enum class Color
{
RED,
GREEN,
BLUE
};
enum class Size
{
SMALL,
MIDDLE,
MAX
};
class Product
{
public:
Product(std::string name, Color color, Size size):
name_(name),
color_(color),
size_(size){}
Color GetColor()
{
return color_;
}
Size GetSize()
{
return Size();
}
std::string GetName()
{
return name_;
}
private:
std::string name_;
Color color_;
Size size_;
};
我们创建了产品的集合