龙岩市建设局网站,泉州软件开发公司,急招工地土建施工员,深圳互联网公司排行榜100小谈设计模式#xff08;5#xff09;—开放封闭原则 专栏介绍专栏地址专栏介绍 开放封闭原则核心思想关键词概括扩展封闭 解释抽象和接口多态 代码示例代码解释 优缺点优点可扩展性可维护性可复用性高内聚低耦合 缺点抽象设计的复杂性需要预留扩展点可能引入过度设计 总结 专… 小谈设计模式5—开放封闭原则 专栏介绍专栏地址专栏介绍 开放封闭原则核心思想关键词概括扩展封闭 解释抽象和接口多态 代码示例代码解释 优缺点优点可扩展性可维护性可复用性高内聚低耦合 缺点抽象设计的复杂性需要预留扩展点可能引入过度设计 总结 专栏介绍
专栏地址
link
专栏介绍
主要对目前市面上常见的23种设计模式进行逐一分析和总结希望有兴趣的小伙伴们可以看一下会持续更新的。希望各位可以监督我我们一起学习进步加油各位。
开放封闭原则
开放封闭原则是面向对象设计中的一个重要原则它指导我们编写可扩展、可维护和可复用的代码。
核心思想
软件实体类、模块、函数等应该对扩展开放对修改封闭。也就是说当需要增加新的功能时应该通过扩展已有的代码来实现而不是修改已有的代码。
关键词概括
扩展
当需求发生变化时我们希望能够方便地增加新的功能或特性而不需要对已有的代码进行修改。这样可以减少引入新错误的风险。
封闭
已有的代码应该是稳定的不应该受到需求变化的影响。即使需求发生变化我们也不应该修改已有的代码。这样可以保护已有的代码防止引入新的错误。
解释
抽象和接口
通过定义抽象类或接口我们可以将可变的部分抽象出来定义一组公共的方法和属性。这样在需要扩展时我们只需要实现新的子类或实现新的接口即可而不需要修改已有的代码。
多态
通过使用多态我们可以在运行时动态地选择不同的实现。这样我们可以通过扩展已有的类或接口来实现新的功能而不需要修改已有的代码。
代码示例
// 定义一个接口
public interface Shape {void draw();
}// 定义一个实现类
public class Circle implements Shape {Overridepublic void draw() {System.out.println(Drawing a circle);}
}// 定义一个扩展类
public class Rectangle implements Shape {Overridepublic void draw() {System.out.println(Drawing a rectangle);}
}// 定义一个客户端类
public class Client {public void drawShapes(ListShape shapes) {for (Shape shape : shapes) {shape.draw();}}
}// 测试代码
public class Main {public static void main(String[] args) {Client client new Client();ListShape shapes new ArrayList();shapes.add(new Circle());shapes.add(new Rectangle());client.drawShapes(shapes);}
}代码解释
在上面的代码中我们定义了一个 Shape 接口它有一个 draw() 方法。然后我们定义了一个实现类 Circle 和一个扩展类 Rectangle它们都实现了 Shape 接口。
在客户端类 Client 中我们定义了一个 drawShapes() 方法它接受一个 List 参数并循环调用每个 Shape 对象的 draw() 方法。这样我们可以通过扩展 Shape 接口并实现新的子类来增加新的图形类型而不需要修改已有的代码。
在测试代码中我们创建了一个 Client 对象并传入一个包含 Circle 和 Rectangle 对象的 List。然后调用 drawShapes() 方法它会依次调用每个图形对象的 draw() 方法输出相应的图形。
这个示例代码演示了如何使用开放封闭原则来实现代码的扩展。通过定义一个公共的接口并实现多个子类我们可以在不修改已有的代码的情况下扩展代码的功能。
优缺点
优点
可扩展性
开放封闭原则可以使系统具有良好的扩展性。通过定义抽象类或接口并实现新的子类或接口我们可以在不修改已有的代码的情况下增加新的功能。
可维护性
开放封闭原则可以提高代码的可维护性。通过将可变的部分与稳定的部分分离开来我们可以更容易地理解和修改代码。当需求发生变化时我们只需要扩展已有的类或接口而不需要修改已有的代码。
可复用性
开放封闭原则可以增加代码的可复用性。通过定义抽象类或接口并实现新的子类或接口我们可以将相同的代码逻辑应用于不同的场景中。
高内聚低耦合
开放封闭原则可以提高代码的内聚性和减少代码的耦合性。通过将可变的部分封装在独立的类中并通过接口进行交互我们可以将代码分解为独立的模块从而提高代码的内聚性和减少代码的耦合性。
缺点
抽象设计的复杂性
开放封闭原则可能会增加代码的复杂性。通过引入抽象类或接口我们需要定义更多的类和接口这会增加代码的复杂性。
需要预留扩展点
开放封闭原则需要在设计时预留扩展点这可能会增加设计的难度。如果没有正确地预留扩展点可能需要修改已有的代码。
可能引入过度设计
开放封闭原则可能会导致过度设计。为了实现扩展性我们可能会引入过多的抽象类和接口这可能会增加代码的复杂性和理解难度。
总结
开放封闭原则是面向对象设计中的一个重要原则它的核心思想是对扩展开放对修改封闭。通过定义抽象类或接口并实现新的子类或接口可以在不修改已有的代码的情况下增加新的功能。这样可以提高系统的扩展性、可维护性和可复用性同时减少代码的耦合性和提高代码的内聚性。然而开放封闭原则也可能增加代码的复杂性和设计难度需要在实际应用中权衡利弊。总的来说开放封闭原则是一种有助于构建可扩展、可维护和可复用的系统的重要原则。