開閉原則重構

1.爲某CRM中可以使用不同的方式顯示圖表,餅狀圖和柱狀圖等,原始設計方案如圖1所示。
在這裏插入圖片描述

圖1 CRM初始設計方案結構圖
爲了支持多種圖表顯示方式,在類ChartDisplay方法display(string type)中存在如下代碼段:
If(type.equals(“pie”))
{PieChart chart =new PieChart();
Chart.display();
}
else if (type.equals(“bar”)
{ BarChart = new BarChart();
Chart.display();
}
如果需要增加一個新的圖表類,如折線圖LineChart,則需要修改ChartDisplay類的display()方法的源代碼,違反了開閉原則。請大家考慮一下,如何對該設計進行重構,使之符合開閉原則。
答:1.1類圖

在這裏插入圖片描述
1.2 程序代碼:

public class OCPClient {
    private ChartDisplay chartDisplay;

    public void setChartDisplay(ChartDisplay chartDisplay) {
        this.chartDisplay = chartDisplay;
    }
    public void display(){
        chartDisplay.display();
    }

    public static void main(String[] args) {
        OCPClient ocpClient = new OCPClient();
        ocpClient.setChartDisplay(new BarChart());
        ocpClient.display();

    }
}

abstract class ChartDisplay{
    public abstract String display();
}

class PieChart extends ChartDisplay {
    @Override
    public String display() {
        return "餅狀圖";
    }
}

class BarChart extends ChartDisplay {
    @Override
    public String display() {
        return "柱狀圖";
    }
}

class LineChart extends ChartDisplay {
    @Override
    public String display() {
        return "折線圖";
    }
}

1.3 程序運行結果:
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章