Java 设计模式(二)-六大原则

时间:2022-09-04 22:58:44

Java 设计模式(二)-六大原则

单一职责原则(Single Responsibility Principle)

定义:

不要存在多余一个原因导致类变更,既一个类只负责一项职责。

问题由来:

当类A有两个不同职责P1和P2时,当类A的职责P1需要修改时,可能影响职责P2的功能不能正常运行。

解决方案:

将类A分为类A1和类A2,A1的职责时P1,A2的职责是P2,此时修改P1或P2职责都不影响另一职责。

优点:

降低类负责度

降低变更引起的风险

提高类的可读性

提高系统的可维护性

里氏替换原则(Liskov Substitution Principle)

定义:

所有引用基类的地方都能透明的使用其子类的对象

问题由来:

子类B在继承父类A的同时可能重载父类或重写父类导致,导致父类A的功能异常。

解决方案:

当使用继承时,遵循里氏替换原则,子类可实现父类的抽象方法,但不能覆盖父类的非抽象方法,当子类重载父类方法时,子类方法的参数要比父类方法的参数要宽松。

优点:

降低代码重用错误。

依赖倒置原则(Dependence Inversion Principle)

定义:

高层模块不应该依赖低层模块,二者都应该依赖其抽象,抽象不应该依赖细节,细节应该依赖抽象。

问题由来:

类A直接依赖类B,假如要将类A改为依赖类C,则必须通过修改类A的代码来达成。这种场景下,类A一般是高层模块,负责复杂的业务逻辑;类B和类C是低层模块,负责基本的原子操作;假如修改类A,会给程序带来不必要的风险。

解决方案:

低层模块尽量要有抽象类和接口

变量的生命类型尽量时抽象类型或接口

使用继承时遵循里氏替换原则

优点:

降低类之间的耦合性,

提高系统的稳定性,

降低修改程序造成的风险。

接口隔离原则(Interface Segregation Principle)

定义:

客户端不应该依赖他不需要的接口,一个类对另一个类的依赖应该建立在最小接口基础之上。

问题由来:

类A通过接口I依赖类B,类C通过接口I依赖类D,如果接口I对于类A和类B来说不是最小接口,则类B和类D必须去实现他们不需要的方法。

解决方案:

接口尽量小,但是要有限度。对接口进行细化可以提高程序设计灵活性是不挣的事实,但是如果过小,则会造成接口数量过多,使设计复杂化。所以一定要适度。

为依赖接口的类定制服务,只暴露给调用的类它需要的方法,它不需要的方法则隐藏起来。只有专注地为一个模块提供定制服务,才能建立最小的依赖关系。

提高内聚,减少对外交互。使接口用最少的方法去完成最多的事情。

优点:

提高系统的灵活性

提高系统的可维护性

迪米特法则(Law Of Demeter

定义:

一个对象应对其它对象保持最少的了解

问题由来:

类与类之间的关系越密切,耦合度越大,当一个类发生改变时,对另一个类的影响也越大。

解决方案:

类间解耦,弱耦合

优点:

提高代码的重用率

开闭原则(Open Closed Principle)

定义:

一个软件实体如类,模块,函数应该对外拓展开发,修改关闭

问题由来:

当软件需要变化时,尽量通过扩展软件实体的行为来实现变化,而不是通过修改已有的代码来实现变化。

解决方案:

合理使用拓展接口

优点:

  提高程序的可拓展性

  提高程序的可维护性

Java 设计模式(二)-六大原则的更多相关文章

  1. C#之设计模式之六大原则(转载)

    设计模式之六大原则(转载) 关于设计模式的六大设计原则的资料网上很多,但是很多地方解释地都太过于笼统化,我也找了很多资料来看,发现CSDN上有几篇关于设计模式的六大原则讲述的比较通俗易懂,因此转载过来 ...

  2. 设计模式之六大原则——接口隔离原则(ISP)

    设计模式之六大原则——接口隔离原则(ISP)  转载于:http://www.cnblogs.com/muzongyan/archive/2010/08/04/1792528.html 接口隔离原则 ...

  3. java中的设计模式及其六大原则

    设计模式分类: 一共分为3大类:创造型模式.结构型模式.行为型模式. 创造型模式:工厂方法(FactoryMethod).抽象工厂模式(AbstractFactory).建造者模式(Builder). ...

  4. JAVA面向对象-----java面向对象的六大原则

    现在编程的主流语言基本上都是面向对象的.如C#,C++,JAVA.我们在使用时,已经构造了一个个的类.但是往往由于我们在类内部或外部的设计上存在种 种问题,导致尽管是面向对象的语言,却是面向过程的逻辑 ...

  5. .NET 设计模式的六大原则理论知识

    1. 单一职责原则(SRP)(Single Responsibility Principle)2. 里氏替换原则(LSP)(Liskov Substitution Principle)3. 依赖倒置原 ...

  6. java对象的六大原则

    对象的六大原则: 1.单一职责原则(Single Responsibility Principle  SRP) 2.开闭原则(Open Close Principle OCP) 3.里氏替换原则(Li ...

  7. 0 Java实现 一篇文章说尽设计模式之六大原则

    我们知道,设计模式很有用,学好设计模式不但能让你写出更简洁,优雅的代码,还能使得代码的结构更清晰,也更有利于扩展 当然设计模式也不是万能的,一成不变的.设计模式只是前人总结出来的一种经验,一种特定问题 ...

  8. C#之设计模式之六大原则

    一.单一职责原则 原文链接:http://blog.csdn.net/lovelion/article/details/7536542 单一职责原则是最简单的面向对象设计原则,它用于控制类的粒度大小. ...

  9. Java设计模式学习——设计原则

    第一章 设计原则 1.开闭原则 一个软件实体,像类,模块,函数应该对扩展开放,对修改关闭 在设计的时候,要时刻考虑,让这个类尽量的好,写好了就不要去修改.如果有新的需求来,在增加一个类就完事了,原来的 ...

随机推荐

  1. AC日记——ISBN号码 openjudge 1.7 29

    29:ISBN号码 总时间限制:  1000ms 内存限制:  65536kB 描述 每一本正式出版的图书都有一个ISBN号码与之对应,ISBN码包括9位数字.1位识别码和3位分隔符,其规定格式如“x ...

  2. hdu2297Run(凸包的巧妙应用)

    链接 很巧妙的一道题,参考 把距离和速度分别作为x和y坐标,以斜率代表追赶速率,简直炫酷~ 具体看上面的博客,画的很清楚,就不再抄写一遍了. #include <iostream> #in ...

  3. Nginx 在windows下配合iis搭建负载均衡过程 &lbrack;转&rsqb;

    因为项目遇到大量图片存储问题,虽然现在我们图片还不是很多(目前在1T上下,预计增长速度每年1.3倍的增长速度),自己在思考如何有效地存储大量图片时,查找一些资料,看到了,有人使用 Nginx搭建服务器 ...

  4. linq中的contains条件

    linq中的contains条件   在sql查询语句中,in 在linq 中用contains,并且contains前面是数组,而后面是列名,如: SELECT distinct BH FROM c ...

  5. 开源的Owin 的身份验证支持 和跨域支持

    http://identitymodel.codeplex.com/ https://identityserver.github.io/ Windows Identity Foundation 6.1 ...

  6. hdu 1509 &amp&semi; hdu 1873 &amp&semi; hdu 1896 &lpar;基础优先队列&rpar;

    http://acm.hdu.edu.cn/showproblem.php?pid=1509 裸的优先队列的应用,输入PUT的时候输入名字,值和优先值进队列,输入GRT的时候输出优先值小的名字和对应的 ...

  7. Visual Event :快速查看 DOM 上绑定的 JS 事件

    http://web.jobbole.com/82503/ Javascript中的事件经常被认为如谜一般不可解.Javascript是一个事件驱动的语言,在这样的前提下前面的看法是很奇怪,但是说到它 ...

  8. AndroidのUI布局之layout weight

    <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android=&quo ...

  9. Storm编程模型及组件流程图

    一.Storm编程模型 二.Storm组件流程图

  10. css去掉input记住密码的黄色

    input:-webkit-autofill,input:-webkit-autofill:hover,input:-webkit-autofill:focus,input:-webkit-autof ...