设计原则

一、针对接口编程,而不是针对实现编程

– 客户无需知道所使用对象的特定类型,只需要知道对象拥有客户所期望的接口。

小注:

        接口是定义行为,只是定义我们要做什么事情,至于如何做这些事情是由接口的实现来做的,当我们定义接口的时候无需关心这个行为如何实现,只要知道有这个接口就可以。
        别人在调用你的代码的时候,都是调用你的接口对象,至于如何实现,对别人是透明的。

二、优先使用对象组合,而不是类继承

– 类继承通常为“白箱复用”,对象组合通常为“黑箱复用”。继承在某种程度上破坏了封装性,子类父类耦合度高;而对象组合则只要求被组合的对象具有良好定义的接口,耦合度低。

小注:

        因为继承在编译时刻就定义了,所以无法在运行时刻改变从父类继承的实现。更糟的是,父类通常至少定义了部分子类的具体表示。因为继承对子类揭示了其父类的实现细节,所以继承常被认为“破坏了封装性” 。子类中的实现与它的父类有如此紧密的依赖关系,以至于父类实现中的任何变化必然会导致子类发生变化。当你需要复用子类时,实现上的依赖性就会产生一些问题。如果继承下来的实现不适合解决新的问题,则父类必须重写或被其他更适合的类替换。这种依赖关系限制了灵活性并最终限制了复用性。一个可用的解决方法就是只继承抽象类,因为抽象类通常提供较少的实现。

        对象组合是通过获得对其他对象的引用而在运行时刻动态定义的。组合要求对象遵守彼此的接口约定,进而要求更仔细地定义接口,而这些接口并不妨碍你将一个对象和其他对象一起使用。这还会产生良好的结果:因为对象只能通过接口访问,所以我们并不破坏封装性;只要类型一致,运行时刻还可以用一个对象来替代另一个对象;更进一步,因为对象的实现是基于接口写的,所以实现上存在较少的依赖关系。

  对象组合对系统设计还有另一个作用,即优先使用对象组合有助于你保持每个类被封装,并被集中在单个任务上。这样类和类继承层次会保持较小规模,并且不太可能增长为不可控制的庞然大物。另一方面,基于对象组合的设计会有更多的对象 (而有较少的类),且系统的行为将依赖于对象间的关系而不是被定义在某个类中。

 

三、封装变化点

– 使用封装来创建对象之间的分界层,让设计者可以在分界层的一侧进行修改,而不会对另一侧产生不良的影响,从而实现层次间的松耦合。

小注:

        考虑你的设计中哪些地方可能变化,这种方式与关注会导致重新设计的原因相反。它不是考虑什么时候会迫使你的设计改变,而是考虑你怎样才能够在不重新设计的情况下进行改变。这里的关键在于封装发生变化的概念,这是许多设计模式的主题。---《设计模式》

四、使用重构得到模式

- 设计模式的应用不宜先入为主,一上来就使用设计模式是对设计模式的最大误用。没有一步到位的设计模式。敏捷软件开发实践提倡的“Refactoring to Patterns ”是目前普遍公认的最好的使用设计模式的方法。

五、单一职责原则(SRP Single Responsibility Principle)

– 一个类应该仅有一个引起它变化的原因。

小注:

        所谓职责是指类变化的原因。如果一个类有多于一个的动机被改变,那么这个类就具有多于一个的职责。而单一职责原则就是指一个类或者模块应该有且只有一个改变的原因。

 

六、开放封闭原则(OCP Open Closed Principle)

– 类模块应该是可扩展的,但是不可修改(对扩展开放,对更改封闭)

小注:

        1、对扩展开放,意味着有新的需求或变化时,可以对现有代码进行扩展,以适应新的情况。

        2、对修改封闭,意味着类一旦设计完成,就可以独立完成其工作,而不要对类进行任何修改。

比如:

        将业务功能抽象为接口,当业务员依赖于固定的抽象时,对于修改就是封闭的;而通过继承和多态机制,从抽象体派生出新的扩展实现,就是对扩展的开放。

 

七、Liskov 替换原则(LSP Liskov Substitution Pinciple)

– 子类必须能够替换它们的基类。

 
八、依赖倒置原则(DIP Dependency Inversion Principle)

– 高层模块不应该依赖于低层模块,二者都应该依赖于抽象。

– 抽象不应该依赖于实现细节,实现细节应该依赖于抽象。

 
九、接口隔离原则(ISP Interface Segregation Principle)

– 不应该强迫客户程序依赖于它们不用的方法。

尽量应用专门的接口,而不是单一的总接口,接口应该面向用户,将依赖建立在最小的接口上。

 

十、合成/聚合复用原则(CARP Composite/Aggregate Reuse Principle )

-在新对象中聚合已有对象,使之成为新对象的成员,从而通过操作这些对象达到复用的目的。

合成方式较继承方式耦合更松散,所以应该少继承、多聚合。

小注:

        如果两个类之间是“Has-A”的关系应使用组合或聚合,如果是“Is-A”关系可使用继承。

 

十一、迪米特法则(LoD Law of Demeter )

又叫最小知识原则,指软件实体应该尽可能少的和其他软件实体发生相互作用

小注:

        迪米特法则的初衷在于降低类之间的耦合。由于每个类尽量减少对其他类的依赖,因此,很容易使得系统的功能模块功能独立,相互之间不存在(或很少有)依赖关系。

        迪米特法则不希望类之间建立直接的联系。如果真的有需要建立联系,也希望能通过它的友元类来转达。因此,应用迪米特法则有可能造成的一个后果就是:系统中存在大量的中介类,这些类之所以存在完全是为了传递类之间的相互调用关系——这在一定程度上增加了系统的复杂度。

       本文作者:jiankunking 出处:http://blog.csdn.net/jiankunking

 

时间: 2024-10-09 18:45:06

设计原则的相关文章

Android界面与交互设计原则:以用户为中心

译者按: 在iOS HIG已经强大经典了N年之后,Android终于推出了一套比较系统的HIG(大概是为了配合Android 4.0 Ice Cream Sandwich).仔细比较两套HIG的"设计原则"部分,发现完全是截然不同的两种风格.iOS HIG走的是更专业型的路线,描述严谨且有不少的专业词汇(比如Metaphors.Consistency之类的).而Android则显得亲民许多,不仅描述方式简要易懂,配图鲜明直观,甚至还用了"me"作为了一系列要点的标题

微服务的4大设计原则和19个解决方案

作者|郝炎峰 编辑|小智 本文将介绍微服务架构的演进.优缺点和微服务应用的设计原则,然后着重介绍作为一个"微服务应用平台"需要提供哪些能力.解决哪些问题才能更好的支撑企业应用架构. 注:本文转载自公众号 EAWorld,已获授权. 写在前面 微服务架构现在是谈到企业应用架构时必聊的话题,微服务之所以火热也是因为相对之前的应用开发方式有很多优点,如更灵活.更能适应现在需求快速变更的大环境. 微服务平台也是我目前正在参与的,还在研发过程中的平台产品,平台是以 SpringCloud 为基础

微服务的4个设计原则和19个解决方案

微服务架构现在是谈到企业应用架构时必聊的话题,微服务之所以火热也是因为相对之前的应用开发方式有很多优点,如更灵活.更能适应现在需求快速变更的大环境. 本文将介绍微服务架构的演进.优缺点和微服务应用的设计原则,然后着重介绍作为一个"微服务应用平台"需要提供哪些能力.解决哪些问题才能更好的支撑企业应用架构. 微服务平台也是我目前正在参与的,还在研发过程中的平台产品,平台是以SpringCloud为基础,结合了普元多年来对企业应用的理解和产品的设计经验,逐步孵化的一个微服务应用平台. 一.微

专注产品UI设计:移动界面设计原则和设计工具

文章描述:移动界面设计点滴. 移动平台的设计与传统的网页有许多不同之处,如独特的交互体验.不同光线下的视觉效果以及移动终端的资源有限.这些都考验着开发者的技术. 通过对设计移动界面的点滴记录,本文为读者介绍了对界面的规划的设计原则以及相关案例,并且推荐了自己中意的设计工具. 一.减少空间占用 与面向桌面电脑的网页设计不同,移动平台的设计中,屏幕空间是一个不可忽视的限制因素.设计需要符合移动平台用户的使用习惯,以最佳的状态呈现屏幕信息. 接下来以当前正在工作的UI做为sample,实战空间优化.

交互网页设计原则:整洁清晰明确

  在网页交互设计中,我们提出:信息获取和传达的过程必须是简洁清晰,自然易懂.这样用户才能够有效的获取这些信息,并迅速作出决定. 1.什么是"简洁自然,清晰易懂"? 简洁清晰:使信息最简化 "少即是多".提倡使用最少的元素来表达最多的信息.如果信息繁杂,将使用户承担大量的信息负担,造成信息过载,影响效率,不能帮助用户解决问题. 自然易懂:使用用户语言 用户获取信息的方式多样,并且对信息的理解程度也各有不同,所以使用用户平时使用和理解的表达方式去传递信息,更可以被用户

交互设计经验谈:移动应用交互设计原则

文章描述:设计在很多时候都是靠灵感的闪现,移动应用的设计则更加的灵活多变,如何能更好地设计出一个应用,没有具体的方法和成规.但是,为了能更好地避免设计师们走弯路,设计原则的学习是有必要的,它给了设计师们一定的参考和指导. 摘要:交互设计专业也有了蓬勃发展,Ben Shneiderman 提出的交互设计"黄金八法"和Nielsen 的"启发式评估10条原则"为交互设计的评估提供了标准.我们在考虑其他原则的基础上,整理了八条移动应用设计的针对性原则. 本文节选自<

用户体验设计原则:安卓用户体验团队制定的设计原则

文章描述:Android界面与交互设计原则. 译者按: 在iOS HIG已经强大经典了N年之后,Android终于推出了一套比较系统的HIG(大概是为了配合Android 4.0 Ice Cream Sandwich).仔细比较两套HIG的"设计原则"部分,发现完全是截然不同的两种风格.iOS HIG走的是更专业型的路线,描述严谨且有不少的专业词汇(比如Metaphors.Consistency之类的).而Android则显得亲民许多,不仅描述方式简要易懂,配图鲜明直观,甚至还用了&q

创造更好的WEB表单:良好的用户体验设计原则和范例

文章描述:现在的WEB设计出现了许多新的设计趋势.最新的CSS3正在越来越多的被设计师们所采用,表单设计也不例外的需要设计师们投入更多的关注和思考. 设计师不再只是为互联网创造漂亮美观的图形那么简单了,作为一个WEB设计师,我们还需要考虑一些其他的问题,比如用户体验,算法,代码等等.如今用户体验设计越来越重要,对于WEB表单的设计尤其如此. WEB表单设计的目标是设计出一套让用户能够从填表到点击提交按钮的最简单的流程.这个过程中不需要太多的炫目效果,虽然jQuery的表单插件一直都很受欢迎.在这

网页设计原则理念以及实战经验技巧

什么是好的网页设计,网页设计原则理念 (1)内容和功能决定表现形式和界面设计 常常有人凭借电话的几句交流或者QQ上的几句聊天,甚至是一张句话的小纸条,就开始做一个网站设计.我决的这都是敷衍了事的通用设计,很不专业不成熟的设计.做一个良好的网页设计,你需要了解客户的东西很多,比如: 1.建站目的(是主推产品还是平品牌,是主要注重SEO还是用户交互等) 2.网站类型 3.栏目规划及每个栏目的表现形式及功能要求 4.主色调.客户性别喜好.联系方式.旧版网址.偏好网址 5.根据行业和客户要求,那些要着重

coming soon页面设计的设计原则和优秀设计案例

文章描述:"即将上线(coming soon)"页面是互联网当中一个相对较新的概念,过去很长一段时间里,每当有新产品新业务准备就绪时,今天还什么都没有,转天它就突然出现在线上了. "即将上线(coming soon)"页面是互联网当中一个相对较新的概念,过去很长一段时间里,每当有新产品新业务准备就绪时,今天还什么都没有,转天它就突然出现在线上了. 如今,互联网及移动应用领域的营销推广策略发生了一些转变,要想将产品有效的推入市场,我们通常需要做足"预热&qu