分析原设计的问题
2026/5/9 13:39:29 网站建设 项目流程

原设计中 ChartDisplay 的 display(String type) 方法需要根据 type 判断是调用 PieChart.display() 还是 BarChart.display() ,如果后续新增图表类型(如折线图LineChart),就需要修改 ChartDisplay 的代码,违反了开闭原则(对扩展开放,对修改关闭)。
重构思路(符合开闭原则)

  1. 抽象图表接口:定义一个抽象的 Chart 接口/抽象类,包含统一的 display() 方法。
  2. 具体图表类实现接口:让 PieChart 、 BarChart (以及未来新增的图表类)都实现 Chart 接口,各自实现自己的 display() 逻辑。
  3. 重构ChartDisplay类: ChartDisplay 不再做类型判断,而是依赖抽象的 Chart 接口,通过调用 Chart.display() 来完成显示,新增图表时只需要新增 Chart 的实现类,无需修改 ChartDisplay 。
  4. public interface Chart {
    void display();
    }
    public class PieChart implements Chart {
    @Override
    public void display() {
    // 饼状图显示逻辑
    }
    }

public class BarChart implements Chart {
@Override
public void display() {
// 柱状图显示逻辑
}
}
public class ChartDisplay {
public void display(Chart chart) {
chart.display();
}
}
重构的优势

  • 新增图表类型(如 LineChart )时,只需要新建一个实现 Chart 接口的类,不需要修改 ChartDisplay 和已有图表类的代码,完全符合开闭原则。
    ​- 代码的可维护性、可扩展性大幅提升,降低了修改带来的风险。
    最终答案:通过抽象Chart接口、让具体图表类实现接口、重构ChartDisplay依赖抽象的方式,使系统符合开闭原则,重构后的类结构如上述所示

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询