软件设计原则-开闭原则

97 阅读1分钟

开闭原则

对扩展开放。对修改关闭。 在程序需要进行拓展的时候,不能去修改原有的代码,我现一个热插拔的效果。简言之,是为了使程序的扩展性好,易于维护和升级。

想要达到这样的效果,我们需要使用接口和抽象类。

因为抽象灵活性好,适应性广,只要抽象的合理,可以基本保持软件架构的稳定。而软件中易变的细节可以从抽象派生来的实现类来进行扩展,当软件需要发生变化时,只需要根据需求重新派生一个实现类来扩展就可以了。

请看下方搜狗输入法案例:

// 皮肤的抽象类
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()
​

以上代码遵循了开闭原则,如果有新的皮肤只需要再定义一个新的具体实现的皮肤类,就能在测试类中使用了,而不必修改之前写好的类和代码。

感谢黑马程序员课程