设计模式之举例说 设计原则

契机

前几天说了一下设计模式,例如这个单例模式,观察者模式,后面还会说一下别的设计模式:例如 代理模式,工厂模式,适配器模式,享元模式,装饰者模式等等.当然了,不会全部说完23种,因为实际中也就会用到6-7种,如果为了用设计模式而用设计模式则就和初衷背道而驰了.一个优良的设计系统都会有这些特点:
1.可扩展性(Extensibility)
2.灵活性(Flexibility)
3.组件化可插拔式(Pluggability)

面向对象编程常用的设计原则包括7个,这些原则并不是孤立存在的,它们相互依赖,相互补充。

设计原则

单一职责原则
类的职责要单一,不能将太多的职责放在一个类中。该原则是实现高内聚、低耦合的指导方针.
可以这么理解
一个类变化了只会影响一个功能并且只有一个原因导致了他的变化。
例如:我要写一个专门用来查询缓存的工具类。这个类里我插入了很多其他的东西,例比如添加修改删除都在里面,如果有一天我要去修改一些方法或者其他的功能报错了,可能会产生牵一发而动全身的效果,但是我如果把职责抽出来,谁报错找谁,修复谁。排错非常方便,耦合度非常低。

开闭原则
一个软件实体应当对扩展开放,对修改关闭。即在不修改源代码的情况下改变对象的行为。
对于这个东西我先举个反例:之前写过解析视图,方法是转发和打印,我写了一个接口,去继承这个接口,如果我直接写成实现类去交给容器管理或者直接去new的话,我新添一个功能重定向是否就需要去改这个实现类,如果日后有人想在里面继续添加功能,势必去修改这个类,添加功能,写好了但是有漏洞,这个人跑路了,后面代码打包上线测试发现了问题找人去修,那个人要去这个类里一个个去看,维护成本极高,包括后面再添加功能,又写在里面,粒度大,可复用性低,哪里要复用,得把整个东西都引进来,非常的麻烦。
如果我遵循开闭原则,让后来人都去扩展,去继承那个接口,哪里出错一目了然,项目急着上线或者测试,找开发有问题看,开发找到删除那个实现类即可,节约了时间成本,后来人想写别的功能,扩展即可,写的不好,删除即可,动不到别人的代码,自己的代码烂了影响不到别人,或者上线。

里氏代换原则
在软件系统中,一个可以接受基类(父类)对象的地方必然可以接受一个子类对象。里氏原则属于开闭原则的实现。这个上面说的很明白了,可以参考视图解析中的接口继承扩展功能。

依赖倒转原则
抽象不应该依赖于细节(实现),细节应当依赖于抽象。换言之,要针对接口编程,而不是针对实现编程。 用到接口的地方,通过依赖注入将接口的实现对象注入进去。可以参考视图解析中的接口继承扩展功能。这个是为了解耦合,有必要举个例子:有一个北堂先生,抽烟喝酒好色又好学,很多人都是这样,我们就可以让北堂实现人这个接口,再去重写这些方法,抽的烟喝的酒好色程度每个人都不一样,有一天,北堂不喝酒了,那直接去删除这个方法即可。
我这里画个图增强理解:
在这里插入图片描述
接口隔离原则
一个类对另外一个类的依赖性应当是建立在最小的接口上的。
一个接口代表一个角色,不应当将不同的角色都交给一个接口。没有关系的接口合并在一起,形成一个臃肿的大接口,这是对角色和接口的污染。(黑色加粗字来自百科)
百科说的很清楚,例如一个是门户,只能有查询方法,
一个是外部系统,有添加订单的方法,
一个是管理后台,添加删除修改查询都要用到.根据接口隔离原则(ISP),一个类对另外一个类的依赖性应当是建立在最小的接口上.也就是说,对于门户,它只能依赖有一个查询方法的接口.
然后子类自行实现需要的接口,不要把不用的东西强塞过去,正所谓:己所不欲勿施于人。

合成复用原则
在系统中应该尽量多使用组合和聚合关联,尽量少使用甚至不使用继承关系。例如:有个人对象,黄种人,黑种人,白种人都是人,都去继承人,是不是有三个子类,那么人还有职业,例如:码农,工程师,清洁工等等。这样一来我增加一个写代码的黄种人,黑人写代码,白人写代码,已经有3个子类了,现在我想增加一个功能,有些妹子会恰北北,那么是不是要去修改源代码这样违反了开闭原则。所以我们采用组合或聚合复用方式,先将将颜色Color抽象为接口,有黄色,白色,黑色三个颜色实现类,将能力也抽象,如果要增加新的颜色或者能力,都不要修改源代码,只要增加实现类就可以。

迪米特法则
一个软件实体应当尽可能少地与其他实体发生相互作用。通过引 入一个合理的第三者来降低现有对象之间的耦合度。例如:一个软件公司的老板觉得公司有点脏,让行政或者谁去办这个事,行政可能通过某种方式,或是叫了清洁工,把办公室打扫干净了,老板于打扫办公室的人面都没见过,更不存在关联。这就是迪米特法则。

以上就是一些设计原则,不难看出这些东西都是为了降低耦合,高内聚的。例如电脑,我们拆机并不难,很清楚的知道哪里是干嘛的,我键盘坏了,不影响屏幕或者鼠标,打不出字了,我就知道可能是键盘坏掉了,试想,如果电脑所有功能都是耦合的,里面线路缠绕的一p吊糟,即使专业维修的都要头疼,我键盘坏了,因为鼠标有耦合,鼠标也不能用了,鼠标和屏幕有耦合,结果屏幕不能用了,牵一发而动全身,所以写代码或者程序一定遵循高内聚低耦合的原则。

以上均为手码,本人文学才疏学浅,如有错别字或者错误请指出,创作不易,求三连(点赞,关注,私信),如果有java问题,可以私信或者评论大家一起探讨,一起进步,祝大家工作顺利万事如意~

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值