????—设计-七个原则-模式—????

发布时间:2024年01月16日

第一原则:单一职责

? ? ? ? 一个类只负责一个功能领域中的相应职责;

接下来我们举一个代码例子,主要的功能实现是:

? ? ? ? 在主函数中运行调用描边工具和填充工具画矩形与圆形

首先写一个圆形类,里面只有一个方法用来返回string类型的"圆形"

再拓展一个矩形类,同样里面只有一个方法用来返回string类型的"矩形"

再写一个枚举类,用来存放两个子类,变向作为基类

写一个画图的工具类,里面有两个方法实现"描边"和"填充"两个功能

最后主函数调用类

运行实现:

虽然实现了功能,但第一违反了七个原则中的单一原则

? ? ? ??代码中if里做了一件事情,else if也做了一件事情,也就是Stroke这个方法已经做了两件事情,同样Fill方法也做了两件事情,这样职责就不单一了。

? ? ? ? 代码中不仅违反了单一职责,而且在Stroke方法和Fill方法中出现了两次创建矩形实例,出现了代码冗余。

接下来我们对Graphics类进行一些优化:

? ? ? ? 这里我们将创建对象实例提取,并且把每一个功能只写成一个方法,从而实现单一职责。

但这样虽然满足了单一职责,扩展性却不是很好,也就是说比如我们需要扩展添加(new)一个三角形类,不仅需要在Graphics类中提取创建一个三角形类,还要新增两个方法(StrokeTriangle与FillTriangle)

如果想解决这种难于拓展的问题,我们可以进行以下优化:

我们可以新增抽象基类Shape

修改两个子类继承Shape基类

修改Graphics类:

? ? ? ? 这样写既满足了单一职责(一个方法一个功能)也同时满足了可拓展性(因为Stroke方法和Fill方法只接收形状类型,去完成功能,也就是说不管哪种类型传进来我都执行,这样如果再写一个三角形类,需要让三角形描边或者填充时,就不用再写三角形填充方法和三角形描边方法了,只需要把新增的三角形类传进描边方法和填充方法即可)。

最后修改主函数调用类

运行同样实现了功能,但符合了七个原则中的单一原则,并且提高了代码的可拓展性。

文章来源:https://blog.csdn.net/weixin_69360830/article/details/135080119
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。