开闭原则
对扩展开放。对修改关闭。 在程序需要进行拓展的时候,不能去修改原有的代码,我现一个热插拔的效果。简言之,是为了使程序的扩展性好,易于维护和升级。
想要达到这样的效果,我们需要使用接口和抽象类。
因为抽象灵活性好,适应性广,只要抽象的合理,可以基本保持软件架构的稳定。而软件中易变的细节可以从抽象派生来的实现类来进行扩展,当软件需要发生变化时,只需要根据需求重新派生一个实现类来扩展就可以了。
请看下方搜狗输入法案例:
// 皮肤的抽象类
class AbstractSkin{
func display() {
//子类必须重写
fatalError("Must Override")
}
}
/**
默认皮肤类
*/
class DefaultSkin :AbstractSkin{
override func display() {
print("默认皮肤")
}
}
//阿卿皮肤
class AqingSkin:AbstractSkin{
override func display() {
print("阿卿皮肤")
}
//搜狗输入法类
class SouGouInput{
var skin:AbstractSkin?
init(skin:AbstractSkin){
self.skin = skin
}
func display(){
self.skin?.display()
}
}
//测试类
//创建皮肤对象
let skin = AqingSkin()
let skin = AbstractSkin()
var input = SouGouInput(skin: skin)
input.display()
以上代码遵循了开闭原则,如果有新的皮肤只需要再定义一个新的具体实现的皮肤类,就能在测试类中使用了,而不必修改之前写好的类和代码。
感谢黑马程序员课程