设计模式
文章平均质量分 56
ices
专注架构设计、OOAD、设计模式、重构、Java EE!
展开
-
门面(Facade)模式
一、 门面(Facade)模式外部与一个子系统的通信必须通过一个统一的门面(Facade)对象进行,这就是门面模式。医院的例子用一个例子进行说明,如果把医院作为一个子系统,按照部门职能,这个系统可以划分为挂号、门诊、划价、化验、收费、取药等。看病的病人要与这些部门打交道,就如同一个子系统的客户端与一个子系统的各个类打交道一样,不是一件容易的事情。首先病人必须先挂号,然后门诊。如果医原创 2012-11-27 23:25:19 · 1012 阅读 · 1 评论 -
状态模式和策略模式
状态模式(state pattern)和策略模式(strategy pattern)的实现方法非常类似,都是利用多态把一些操作分配到一组相关的简单的类中,因此很多人认为这两种模式实际上是相同的。然而在现实世界中,策略(如促销一种商品的策略)和状态(如同一个按钮来控制一个电梯的状态,又如手机界面中一个按钮来控制手机)是两种完全不同的思想。当我们对状态和策略进行建模时,这种差异会导致完全不同的原创 2012-12-25 22:19:35 · 1067 阅读 · 0 评论 -
单一职责原则(Single Responsibility Principle)
1 作用它指导我们如何提高代码的可重用度!2 定义一个类应该仅有一个引起它的变化的原因(职责),或者说一个类只负责一个功能领域中的相应职责。这条原则也称为类设计的“高内聚性原则”。(l)含义之一:避免相同的职责(也称为功能)分散到不同的类中实现。(2)含义之二:也应该要避免一个类承担过多的职责。将过多的职责耦合在一个类中导致了脆弱设计。软件设计真正要做的许多内容,就是发原创 2012-11-18 00:22:41 · 3429 阅读 · 6 评论 -
里氏代换原则(Liskov Substitution Principle)
作用它指导我们如何正确地进行继承与派生,并合理地重用代码!定义子类型必须能够替换掉它们的父类型、并出现在父类能够出现的任何地方。这个就是尽量用多态的方法编程,也就是GRASP模式中的多态。如果对于每一个类型为T1的对象o1,都有类型为T2的对象o2,使得以T1定义的所有程序P在所有的对象o1都代换成o2时,程序P的行为没有变化,那么类型T2是类型T1的子类型。换言之,一个软原创 2012-11-18 00:31:21 · 1763 阅读 · 0 评论 -
迪米特法则(Law of Demeter)
迪米特法则(Law of Demeter, LoD)又称为最少知识原则(Least Knowledge Principle, LKP),它有多种定义方法,其中几种典型定义如下:(1) 不要和“陌生人”说话。 (2) 只与你的直接朋友通信。 (3) 每一个软件单位对其他的单位都只有最少的知识,而且局限于那些与本单位密切相关的软件单位。 (4) 一个对象原创 2012-11-18 00:36:33 · 1326 阅读 · 0 评论 -
接口隔离原则(Interface Segregation Principle)
作用:它指导我们如何正确地进行接口设计!定义1) 一个类对另外一个类的依赖性应当是建立在最小的接口上Ø 一旦一个接口太大,则需要将它分割成一些更细小的接口,使用该接口的客户端仅需知道与之相关的方法即可。Ø ISP可以达到不强迫客户(接口的使用方)依赖于他们不用的方法——在接口设计中应该保证,接口的实现类应该只呈现为单一职责的角色(遵守SRP原则);Ø原创 2012-11-18 00:29:08 · 1980 阅读 · 2 评论 -
小例子背后的大道理——Adapter模式详解
小例子背后的大道理——Adapter模式详解上回问题回顾 前文说到一位用户拿着业界标准开关(一个标准的StandardSwitcher,它依赖IStandardSwitchable接口才能工作,然而目前我们的灯并不支持这个接口)出现在我面前,叫嚣着他的“标准开关”应该能打开我们的灯。好吧,这个需求是合理的,的确应该支持。但是该死的是,为什么没有早一点儿知道这个标准的存在转载 2012-11-18 09:55:25 · 1202 阅读 · 1 评论 -
小例子背后的大道理——从DIP中“倒置”的含义说接口的正确使用
小例子背后的大道理——从DIP中“倒置”的含义说接口的正确使用提纲开灯的例子暗流涌动Guru眼中的依赖DIP(依赖倒置原则)为什么要解耦合?接口的坏味道同一张类图的不同解释——真假DIP了解DIP有什么用?DIP用在什么地方?下回预告参考文献开灯的例子 选开灯做例子,是因为这个例子既常见又简单,而且潜在的需转载 2012-11-18 09:54:30 · 1006 阅读 · 0 评论 -
小例子背后的大道理——用户需求+设计原则+正确应用 =设计方案
上回的最后,来了两个用户,分别提出了两个不同的需求。一个要求用两个开关控制一个灯,一个要求用一个开关控制所有的灯。本回将就这两个需求进行分析。我写这段话的时候并没有想出这个需求的具体方案,重要的过程,思路有时候比结果更重要。所以,我的方案可能会"跑偏";但是如果你能从过程中体会到些什么,那这篇就没有白写。 两个开关控制一个灯。这个问题好像很简单,把两个Switcher的Switch转载 2012-11-18 09:49:46 · 1036 阅读 · 0 评论 -
组合/聚合复用原则(Composition/Aggregation Principle)
定义又叫合成复用原则。原则就是在一个新的对象里面通过关联关系(包括组合关系和聚合关系)使用一些已有的对象,使之成为新对象的一部分,新对象通过委派调用已有对象的方法达到复用其已有功能的目的。也就是,要尽量使用类的合成复用,尽量不要使用继承。组合/聚合复用原则要点:就是在一个新的对象里面使用一些已有的对象,使之成为新对象的一部分,新的对象通过向这些对象的委派达到复用已有功能的目的。这个原则原创 2012-11-18 00:35:32 · 2158 阅读 · 0 评论 -
依赖倒转原则(Dependency Inversion Principle)
作用:它指导我们如何正确地消解模块间的依赖关系,同时它也是框架设计的核心原则。 依赖倒置原则的本质就是要求将类之间的关系建立在抽象接口的基础上的。Robert Martin这样描述依赖倒置原则[Martin 1996]:传统的策略是把复杂的系统“化整为零,各个击破”。这就是通常所说的分解。SA方法(结构化的分析)也是采用这样的分解策略,把大型和复杂的软件系统分解成若干个人们易于理解和易原创 2012-11-18 00:33:43 · 2518 阅读 · 0 评论 -
“开-闭”原则(Open-Closed Principle)
1.1 “开-闭”原则(Open-Closed Principle)1.1.1 作用它指导我们如何提高代码的可扩展性!1.1.2 定义(1)Open(Open for extension)模块的行为必须是开放的、支持扩展的,而不是僵化的。(2)Closed(Closed for modification)在对模块的功能进行扩展时,不应该影响或大规模地影响已有的程原创 2012-11-18 00:18:01 · 5133 阅读 · 0 评论 -
面向对象设计原则
设计原则名称设计原则简介重要性单一职责原则(Single Responsibility Principle, SRP)类的职责要单一,不能将太多的职责放在一个类中。 ★★★★☆ 开闭原则(Open-Closed Principle, OCP) 软件实体对扩展是开放的,但对修改是关原创 2012-11-17 13:58:09 · 1178 阅读 · 0 评论 -
设计模式总结
设计模式主要有作用是:1、提高复用2、封装变化,提取潜在的变化,对变化进行封装,将变化对开发和维护的影响降到最低设计模式的分类:1、创建型模式:主要是应用于对象的创建单例模式:控制对象的数量工厂方法模式、抽象工厂模式、生成器模式和原型模式都是用于减少使用new时与具体类之间的耦合2、结构型模式:主要是使用对象创建更复杂的结构适配器模式:转接对象接口,使之提供原创 2012-12-21 22:07:22 · 894 阅读 · 0 评论