第一原则:单一职责
一个类只负责一个功能领域中的相应职责;
接下来我们举一个代码例子,主要的功能实现是:
在主函数中运行调用描边工具和填充工具画矩形与圆形
首先写一个圆形类,里面只有一个方法用来返回string类型的"圆形"
再拓展一个矩形类,同样里面只有一个方法用来返回string类型的"矩形"
再写一个枚举类,用来存放两个子类,变向作为基类
写一个画图的工具类,里面有两个方法实现"描边"和"填充"两个功能
最后主函数调用类
运行实现:
虽然实现了功能,但第一违反了七个原则中的单一原则
代码中if里做了一件事情,else if也做了一件事情,也就是Stroke这个方法已经做了两件事情,同样Fill方法也做了两件事情,这样职责就不单一了。
代码中不仅违反了单一职责,而且在Stroke方法和Fill方法中出现了两次创建矩形实例,出现了代码冗余。
接下来我们对Graphics类进行一些优化:
这里我们将创建对象实例提取,并且把每一个功能只写成一个方法,从而实现单一职责。
但这样虽然满足了单一职责,扩展性却不是很好,也就是说比如我们需要扩展添加(new)一个三角形类,不仅需要在Graphics类中提取创建一个三角形类,还要新增两个方法(StrokeTriangle与FillTriangle)
如果想解决这种难于拓展的问题,我们可以进行以下优化:
我们可以新增抽象基类Shape
修改两个子类继承Shape基类
修改Graphics类:
这样写既满足了单一职责(一个方法一个功能)也同时满足了可拓展性(因为Stroke方法和Fill方法只接收形状类型,去完成功能,也就是说不管哪种类型传进来我都执行,这样如果再写一个三角形类,需要让三角形描边或者填充时,就不用再写三角形填充方法和三角形描边方法了,只需要把新增的三角形类传进描边方法和填充方法即可)。
最后修改主函数调用类
运行同样实现了功能,但符合了七个原则中的单一原则,并且提高了代码的可拓展性。