七大设计原则
离娄之明,公输子之巧,不以规矩,不能成方圆。 ——邹·孟轲《孟子·离娄上》
如果您觉得文章不错,可以到GitHub赏一个star,感激不尽,里面有全部的23种设计模式和面试常考的数据结构的实现。
开闭原则
开闭原则(Open Closed Principle,OCP) 由勃兰特.梅耶(Bertrand Meyer)提出,他在1988 年的著作《面向对象软件构造》( Object Oriented Software Construction)中提出:软件实体应当对扩展开放,对修改关闭(Software entities should be open for extension, but closed for modification),这就是开闭原则的经典定义。
**开闭原则是设计模式中的总原则,开闭原则就是说:对拓展开放、对修改关闭。**模块应该在尽不修改代码的前提下进行拓展,这就需要使用接口和抽象类来实现预期效果。
我们举例说明什么是开闭原则,以4s店销售汽车为例,其类图如图所示:
ICar接口定义了汽车的两个属性:名称和价格。BenzCar是一个奔驰车的实现类,代表奔驰车的总称。Shop4S代表售卖的4S店,ICar接口的代码清单如下
type ICar interface {
// 车名
GetName() string
// 价格
GetPrice() int
}
一般情况下4S店只出售一种品牌的车,这里用奔驰为例,代码清单如下
type BenzCar struct {
name string
price int
}
func (b BenzCar) GetName() string {
return b.name
}
func (b BenzCar) GetPrice() int {
return b.price
}
这里我们模拟一下4s店售车记录
func TestBenzCar_GetName(t *testing.T) {
var (
list []ICar
)
list = []ICar{
}
list = append(list,&BenzCar{
"迈巴赫",130})
list = append(list,&BenzCar{
"AMG",343})
list = append(list,&BenzCar{
"V",60})
for _,v := range