面向对象的十大原则

面向对象设计原则是OOPS(Object-Oriented Programming System,面向对象的程序设计系统)编程的核心,但大多数Java程序员追逐像SingletonDecoratorObserver这样的设计模式,而不重视面向对象的分析和设计。甚至还有经验丰富的Java程序员没有听说过OOPS和SOLID设计原则,他们根本不知道设计原则的好处,也不知道如何依照这些原则来进行编程。

众所周知,Java编程最基本的原则就是要追求高内聚和低耦合的解决方案和代码模块设计。查看Apache和Sun的开放源代码能帮助你发现其他Java设计原则在这些代码中的实际运用。Java Development Kit则遵循以下模式:BorderFactory类中的工厂模式、Runtime类中的单件模式。你可以通过Joshua Bloch的《Effective Java》一书来了解更多信息。我个人偏向的另一种面向对象的设计模式是Kathy Sierra的Head First Design Pattern以及Head First Object Oriented Analysis and Design

虽然实际案例是学习设计原则或模式的最佳途径,但通过本文的介绍,没有接触过这些原则或还在学习阶段的Java程序员也能够了解这10个面向对象的设计原则。其实每条原则都需要大量的篇幅才能讲清楚,但我会尽力做到言简意赅。

原则1:DRY(Don‘t repeat yourself)

即不要写重复的代码,而是用“abstraction”类来抽象公有的东西。如果你需要多次用到一个硬编码值,那么可以设为公共常量;如果你要在两个以上的地方使用一个代码块,那么可以将它设为一个独立的方法。SOLID设计原则的优点是易于维护,但要注意,不要滥用,duplicate 不是针对代码,而是针对功能。这意味着,即使用公共代码来验证OrderID和SSN,二者也不会是相同的。使用公共代码来实现两个不同的功能,其实就是近似地把这两个功能永远捆绑到了一起,如果OrderID改变了其格式,SSN验证代码也会中断。因此要慎用这种组合,不要随意捆绑类似但不相关的功能。

原则2:封装变化

在软件领域中唯一不变的就是“Change”,因此封装你认为或猜测未来将发生变化的代码。OOPS设计模式的优点在于易于测试和维护封装的代码。如果你使用Java编码,可以默认私有化变量和方法,并逐步增加访问权限,比如从private到protected和not public。有几种Java设计模式也使用封装,比如Factory设计模式是封装“对象创建”,其灵活性使得之后引进新代码不会对现有的代码造成影响。

原则3:开闭原则

即对扩展开放,对修改关闭。这是另一种非常棒的设计原则,可以防止其他人更改已经测试好的代码。理论上,可以在不修改原有的模块的基础上,扩展功能。这也是开闭原则的宗旨。

原则4:单一职责原则

类被修改的几率很大,因此应该专注于单一的功能。如果你把多个功能放在同一个类中,功能之间就形成了关联,改变其中一个功能,有可能中止另一个功能,这时就需要新一轮的测试来避免可能出现的问题。

原则5:依赖注入或倒置原则

这个设计原则的亮点在于任何被DI框架注入的类很容易用mock对象进行测试和维护,因为对象创建代码集中在框架中,客户端代码也不混乱。有很多方式可以实现依赖倒置,比如像AspectJ等的AOP(Aspect Oriented programming)框架使用的字节码技术,或Spring框架使用的代理等。

原则6:优先利用组合而非继承

如果可能的话,优先利用组合而不是继承。一些人可能会质疑,但我发现,组合比继承灵活得多。组合允许在运行期间通过设置类的属性来改变类的行为,也可以通过使用接口来组合一个类,它提供了更高的灵活性,并可以随时实现。《Effective Java》也推荐此原则。

原则7:里氏代换原则(LSP)

根据该原则,子类必须能够替换掉它们的基类,也就是说使用基类的方法或函数能够顺利地引用子类对象。LSP原则与单一职责原则和接口分离原则密切相关,如果一个类比子类具备更多功能,很有可能某些功能会失效,这就违反了LSP原则。为了遵循该设计原则,派生类或子类必须增强功能。

原则8:接口分离原则

采用多个与特定客户类有关的接口比采用一个通用的涵盖多个业务方法的接口要好。设计接口很棘手,因为一旦释放接口,你就无法在不中断执行的情况下改变它。在Java中,该原则的另一个优势在于,在任何类使用接口之前,接口不利于实现所有的方法,所以单一的功能意味着更少的实现方法。

原则9:针对接口编程,而不是针对实现编程

该原则可以使代码更加灵活,以便可以在任何接口实现中使用。因此,在Java中最好使用变量接口类型、方法返回类型、方法参数类型等。《Effective Java》 和《head first design pattern》书中也有提到。

原则10:委托原则

该原则最典型的例子是Java中的equals() 和 hashCode() 方法。为了平等地比较两个对象,我们用类本身而不是客户端类来做比较。这个设计原则的好处是没有重复的代码,而且很容易对其进行修改。

总之,希望这些面向对象的设计原则能帮助你写出更灵活更好的代码。理论是第一步,更重要的是需要开发者在实践中去运用和体会。

时间: 2024-10-18 14:10:48

面向对象的十大原则的相关文章

电商干货!1000万烧出来的高点击率钻展创意图十大原则(营销&人性)

梦想凯歌:创意图的钻展的灵魂,没有创意图你什么都不是.无论是日常推广还是做大促活动,创意图是测试的重中之重,一定要提前测试好每一个资源位的创意图.今天这篇好文是一个资深电商设计师在操作钻展烧了1000多万后总结的经验,不少技巧可以用在Banner设计上. 创意图是你获取流量的入口,由创意图延升到落地页,进而是整一个活动项目. 所以,这节课很关键,也是我这系列课程的重点.到目前操作钻展也至少烧了1000多万了. 很多朋友常常发图片给梦想凯歌,问如何优化?这十大原则是我梦想凯歌做创意图的总结! 虽然

优秀API设计的十大原则

优秀API设计的十大原则 2015-09-23    分类:编程开发.设计模式.首页精华暂无人评论 分享到:更多4 二十万年薪PHP工程师培养计划 成为被疯抢的Android牛人 风中叶讲Java重难点 Linux运维基础课程 本文由码农网 – 小峰原创翻译,转载请看清文末的转载要求,欢迎加入技术翻译小组! 每个软件开发人员都使用API.“优秀”的API设计就像魔法.不过,我不知道有多少人可以解释为什么有的API很复杂.很难学,而有的则干净.简单.使用起来堪称是一种快乐.关于这个问题,我将在文中

产品安全设计十大原则

产品安全设计十大原则 原则1:最小化攻击面:          系统每增加一个功能特性就有可能会引入新的风险,通过安全开发可以减少攻击面进而达到控制系统整体风险的目的.          打个比方说,某在线web应用向用户提供了一个通过搜索来获取帮助的功能,如果后端代码没有正确实现该功能就有可能导致存在SQL注入漏洞,但是即便如此,我们还是有办法降低或消除风险的,比如: u  该帮助功能只能被授权的用户使用. u  后端代码对用户输入的数据进行了校验. u  帮助功能不支持搜索,只支持查看. 可

面向对象的5大原则

面向对象的三大特征 ①继承, 通过子类继承父类,达到复用父类的目的 ②封装, 将属性和方法结合在一起,定义为一种类型,一般会将信息private化 ③多态, 声明形式一致,实现方式不同,(体现方式:方法重载,方法重写),形参为父类,实参为任意子类对象 面向对象的五大基本原则(S-O-L-I-D,联想solid单词) ①单一原则((single responsibility principle) 一个类只能有一个引起它变化的 原因 ②开放关闭原则(open-closed principle) 软件

Java的开发—面向对象的7大原则之单一迪米特法则(六)

一.定义 迪米特法则,又叫最少知道原则(Least Knowledge Principle) 一个类应该保持对其他类最少的了解 也就是说:只与直接朋友交流,不和陌生人交流 朋友:每个对象都会与其他对象有耦合关系,只要两个对象之间有耦合关系,我们称之为朋友 耦合分为:依赖.关联.组合.聚合等等,我们称出现在成员变量.方法参数.方法返回值中的类为直接朋友,其他不是朋友.陌生类最好不要最为局部变量的形式出现在类的内部 二.示例 问题由来: 类与类之间的关系越紧密,他们的耦合度就越高,当一个类发生变化时

远离故障的十大原则

发布时间:2013 年 2 月 18 日 发布者: OurMySQL 来源:hate mysql because you love her deeply 故障是运维人员永远的痛.相信每一个运维人员的KPI中都有一项:可用性.可用性高就是不出故障,各个公司对可用性和故障评级的标准都不相同,但是避免故障的方法却是殊途同归.我们怎么避免故障,沃趣科技简单列举了以下几条,与大家共勉!1.变更要有回滚,在同样的环境测试过2.对破坏性的操作谨慎小心3.设置好命令提示 4.备份并验证备份有效性5.对生产环境存

选IDC服务器的十大原则

1.尽量直接找机房或者一级代理,而且更重要的是服务跟不跟的上,处理问题及不及时. 2.测试的机器应与打算购买的机器一致 ,有的IDC奸商,将测试的机器是至强机器,带宽放在100M的线上,用户测试时感觉的确快,但一转手到用户时,可能是普通的机器+普通的带宽,速度明显跟不上.要想体验真实的测试速度,必须确认测试的机器与打算购买的机器一致,也就是说,如果测试可以了,那就直接要这一台机,不用换线,不用换机器,不用下架. 3.签定托管/租用合同 很多人对于合同之事,不太重视,但一般机房或者一级代理,都提供

APP设计师必知:用户体验十大原则!

如 果想从众多的产品中脱颖而出,获得成功的话,其实最重要的突破点就是要抓住用户的体验,或者是抓住了用户的某一种心里,或者是在界面布局上大胆突破,或者 是做了很少有人关注到的细分领域,或者是让人产生了真实生活中的亲切感等等,但这一切都源来于生活中的设计的灵感和技巧. 1.流程图是一切工作的基础 如 果跳过流程图直接进入开发会让开发变得复杂.不可控,很容易让用户迷茫,所以最后用户必将选择关掉或者卸载你的App.所以,即便是一个简单的app也要 有一个思虑周全的流程图,以确保它有合乎逻辑的.合理的导航

测试十大原则

一.测试是一个持续过程,而不是一个阶段. 二.测试必须被计划.被控制,而且被提供时间和资源. 三.测试应当有重点. 四.测试只能证明软件存在错误而不能证明软件没有错误. 五.测试是不可能穷尽的,当测试出口条件满足时就可以停止测试. 六.应当尽早地进行软件测试. 七.测试人员应当站在公正的立场上进行测试,如实的记录和报告缺陷. 八.所有的测试都应追溯到用户需求. 九.80%的软件缺陷常常存在软件20%的空间里面. 十.并非所有的软件缺陷都要修复. 原文地址:https://www.cnblogs.