开闭原则重构

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 程序运行结果:
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值