目录
一.什么是开闭原则
定义:一个软件实体如类,模块和函数应该对扩展开放,对修改关闭。
说白了就是当一个产品做好的时候,如果有新的功能加入我们应该尽量做到去扩展而不是去修改已经设计好的功能或结构,比如笔记本电脑,厂家生产一台笔记本,如果我们想使用鼠标那么我们只需要使用厂家给我们的接口去连接上自己买好的或者做好的usb就行
二.为什么会有开闭原则
客户要求设计一个登录的界面需求
loginFrom是登录界面
而Cirlebutton是界面中的一个圆形按钮
,于是我飞快地设计好了于是我把设计好的类发给项目组长,
组长看了我两分钟手上拳头紧握,几欲动手,最后打回。
而没学过设计模式的我不明所以
下面是我写好的代码
class Cirlebutton {
public:
void dispaly() {
......
}
};
class loginFrom {
Cirlebutton btA;
public:
void displays() {
........
}
};
可以看出,我虽然实现了基本需求但是如果需求有变更,想改一个新的方形buton那我是不是得机械的把loginfrom中的Cirlebutton改为RectangeButton呢?
每次按钮有变化我是不是又得改回去,所以程序可扩展性极差,对其他人也十分不友好,
于是今天学了设计模式的我花了点时间改好了代码,小心的提交了代码,随后傲娇的组长面带喜色。
class AbstractButton {
public:
virtual void displays() {
.........
};
};
class Cirlebutton : public AbstractButton {
public:
void displays() {
............
}
};
class loginFrom {
AbstractButton* btA;
public:
void setbt(AbstractButton* btAa) {
this->btA = btAa;
};
void displays() {
this->btA->displays();
}
};
那么这段代买究竟有何玄机
可以看到这段代码增加了一个抽象父类AbstractButton作为接口,
子类Cirlebutton去实现AbstractButton,同时重写dispalys方法
以及父类增加新的关键字virtual 去修饰dispalys抽象方法
三.以及怎么使用开闭原则
在Java中我们可以定于interface面向接口编程我们只需要implement方法
但是C++中并没有这样的关键字,C++可以通过关键字virtual定义虚函数或者纯虚函数的方式实现接口,然后子类继承这个接口类并且定义虚函数的功能就可以了,
这样我们每次更改业务需求时我们只需要定义一个新的button去继承就行了