分析原设计的问题
原设计中 ChartDisplay 的 display(String type) 方法需要根据 type 判断是调用 PieChart.display() 还是 BarChart.display() 如果后续新增图表类型如折线图LineChart就需要修改 ChartDisplay 的代码违反了开闭原则对扩展开放对修改关闭。重构思路符合开闭原则抽象图表接口定义一个抽象的 Chart 接口/抽象类包含统一的 display() 方法。具体图表类实现接口让 PieChart 、 BarChart 以及未来新增的图表类都实现 Chart 接口各自实现自己的 display() 逻辑。重构ChartDisplay类 ChartDisplay 不再做类型判断而是依赖抽象的 Chart 接口通过调用 Chart.display() 来完成显示新增图表时只需要新增 Chart 的实现类无需修改 ChartDisplay 。public interface Chart {void display();}public class PieChart implements Chart {Overridepublic void display() {// 饼状图显示逻辑}}public class BarChart implements Chart {Overridepublic void display() {// 柱状图显示逻辑}}public class ChartDisplay {public void display(Chart chart) {chart.display();}}重构的优势新增图表类型如 LineChart 时只需要新建一个实现 Chart 接口的类不需要修改 ChartDisplay 和已有图表类的代码完全符合开闭原则。- 代码的可维护性、可扩展性大幅提升降低了修改带来的风险。最终答案通过抽象Chart接口、让具体图表类实现接口、重构ChartDisplay依赖抽象的方式使系统符合开闭原则重构后的类结构如上述所示