一、引子
这是一个很简单的模式,却被非常广泛的使用。之所以简单是因为在这个模式中仅仅使用到了继承关系。
继承关系由于自身的缺陷,被专家们扣上了“罪恶”的帽子。“使用委派关系代替继承关系”,“尽量使用接口实现而不是抽象类继承”等等专家警告,让我们这些菜鸟对继承“另眼相看”。
其实,继承还是有很多自身的优点所在。只是被大家滥用的似乎缺点更加明显了。合理的利用继承关系,还是能对你的系统设计
起到很好的作用的。而模板方法模式就是其中的一个使用范例。
二、定 ...
一,命令模式的实现:
命令模式里边一般都有以下几个角色:客户端,请求者,命令接口,命令实现,接受者,
下边是简单命令模式的实现代码实现:
1 public class Client{
2 public static void main(String[] args){
3 Receiver receiver = new Receiver();
4 &n ...
ξ 3.1 软件系统的可维护性
☆ 导致一个软件设计的可维护性较低,也就是说会随着性能要求的变化二“腐烂”的真正原因有四个:
① 过于僵硬
加入一个新性能,不仅仅意味着建造一个独立的模块,而且因为这个新性能会波及很多其他的模块,最好变成跨越几个模块的改动。
② 过于脆弱
对一个地方的修改,往往会导致看上去没什么关系的另外一个地方发生故障。尽管在修改之前,设计师会尽力预测可能的故障点,当是修改完成之前,系统的原始设计师们甚至都无法预测到可能会波及的地方。
③ 复用率低
每当程序员发 ...
ξ 4.1 什么是开闭原则
☆ 开闭原则指的是一个软件实体应对对扩展开发,对修改关闭(Software entities should be open for
extension, but closed for
modification)。这个原则是说在设计一个模块的时候,应对使这个模块可以在不被修改的前提下被扩展,换言之,应对可以不必修改源代码的情况下
改变这个模块的行为。
☆ 满足开闭原则的软件系统的优越性:
① 通过扩展已有的软件系统,可以提供新的行为,以满足对软件的新需求,使变化中的软件系统有一定的适应性和灵活性。
② 已有的软件模块,特别是最重要的抽象层模块不能再 ...
☆ 依赖倒转原则,要依赖于抽象,而不要依赖于具体实现。
ξ 8.3 依赖倒转原则
☆ 三种耦合关系
① 零耦合关系,如果两个类没有耦合关系,就称之为零耦合;
② 具体耦合,具体耦合发生在两个具体的类之间,经由一个类对另外一个具体类的直接引用造成的。
③ 抽象耦合关系,抽象耦合关系发生在一个具体类和一个抽象类之间,使用两个必须发生关系的类之间存在有最大的灵活性。
☆ 依赖倒转原则的另外一种表述是:
要针对接口编程,不要针对实现编程(Program to an interface, not an implementation)[GOF95]。同样,在处理类之间的耦合关系时,尽量 ...
1.开—闭原则(Open-Closed Principle, short for OCP)
该原则讲一个软件实体应当对扩展开放,对修改关闭。说的是在设计一个模块的时候,应当使这个模块可以在不被修改的前提下被扩展。换言之,应当可以在不必修
改源代码的情况下改变这个模块的行为。实现开闭原则的关键是抽象化。在"开—闭"原则中,不允许修改的是抽象的类或者接口,允许扩展的是具体的实现类,抽
象类和接口在"开—闭"原则中扮演着极其重要的角色,在设计过程中既要预知可能变化的需求,又要预见所有可能 ...
“is
a”代表的是类之间的继承关系,比如PC机是计算机,工作站也是计算机。PC机和工作站是两种不同类型的计算机,但都继承了计算机的共同特性。因此在用
Java语言实现时,应该将PC机和工作站定义成两种类,均继承计算机类。
“has a”代表的是对象和它的成员的从属关系。同一种类的对象,通过它们的属性的不同值来区别。比如一台PC机的操作系统是Windows,另一台PC机的操作系统是Linux。操作系统是PC机的一个成员变量,根据这一成员变量的不同值,可以区分不同的PC机对象。
再比如张三和李四都是人,但他们的名字不 ...
复用的基本种类:
合成/聚合复用
:
优点:
* 新对象存取成分对象的唯一方法是通过成分对象的接口。
* 这种复用是黑箱复用,因为成分对象的内部细节是新对象所看不见的。
* 这种复用支持包装。
* 这种复用所需的依赖较少。
* 每一个新的类可以将焦点集中在一个任务上。
* 这种复用可以在运行时间内动态进行,新对象可以动态的引用与成分对象类型相同的对象。
缺点:
* 系统中会有比较多的对象需要管理。
通过继承的复用:
合成/聚合作为复用手段可以应用到几乎任何环境中去,而继承只能在有限的环境中使用。尽管继承是一种非常重要的复用手段,但应当首先考虑合成/聚合,而 ...
☆ 合成/聚合复用原则经常又叫做合成复用原则。该原则就是在一个新的对象里面使用一些已有的对象,使之成为新对象的一部分:新的对象通过向这些对象的委派达到复用已有功能的目的。
ξ 10.1 合成与聚合的区别
合成和聚合均是关联的特殊情况。聚合用来表示“拥有”关系或者整体与部分的关系;而合成则用来表示一种强得
多的“拥有”关系。在一个合成关系里面,部分和整体的生命周期是一样的。一个合成的新的对象完全拥有对其组成部分的支配权,包括它们的创建和销毁等。使用
程序语言的术语来说,组合而成的新对象对组成部分的内存分配、内存释放有绝对的责任。
& ...
第五个设计模式:合成模式
合成模式
把部分和整体关系用树结构表示,是属于对象的结构模式。合成模式
要对组合的对象进行管理,所以在一定位置给予对象的相关管理方法,如:add(),remove()等.合成模式
中对象的管理有两种方案。
1.安全方式:此方式只允许树枝构件有对象的管理方法。
2.透明方式:此方式只允许树枝和树叶都有对象的管理方法,但树叶对象中的管理方法无实际意义。
一.UML
示意图
二.组成部分
抽象构件:抽象组合对象的公共行为接口
树叶构件:树叶对象,没有下级子对象
树枝构件:树枝对象,树枝对象可以包含一个或多个其他 ...
我们要得到一个对象,马上想到构造方法,其实,静态工厂方法也可以替我们做到。
例如,在jdk1.4里面,Boolean用了一个静态方法来得到一个boolean对象:
public static Boolean valueOf(boolean b)
question:这个方法实际上并不返回一个object?
对
的, sun的jdk 帮助里面讲: If a new Boolean instance is not required, this
method should generally be used in preference to the constrUCtor
Boo ...
工厂模式总述
工厂模式属于类的创建模式,工厂模式专门负责将大量有共同接口的类实例化。工厂模式可以动态决定将哪一个类实例化,而不必事先知道每次要实例化哪一个类。工厂模式有三个基本形态:
1. 简单工厂(Simple Factory)模式,又称静态工厂方法模式(Static Factory Method
Pattern)。
2. 工厂方法(Factory Method)模式,又称多态性工厂(Polymorphic Factory)模式或虚拟构造子(Virtual Constructor)模式。
3. 抽象工厂(Abstract Factory)模式,又称工具箱(Kit 或To ...
设计模式之Visitor
板桥里人
http://www.jdon.com
2002/05/05(转载请保留)
Visitor访问者模式定义
作用于某个对象群中各个对象的操作. 它可以使你在不改变这些对象本身的情况下,定义作用于这些对象的新操作.
在Java中,Visitor模式实际上是分离了collection结构中的元素和对这些元素进行操作的行为.
为何使用Visitor?
Java的Collection(包括Vector和Hashtable)是我们最经常 ...
一、引子
对于系统中一个已经完成的类层次结构,我们已经给它提供了满足需求的接口。但是面对新增加的需求,我们应该怎么做呢?如果这是为数不多的几次变动,而且你不用为了一个需求的调整而将整个类层次结构统统地修改一遍,那么直接在原有类层次结构上修改也许是个不错的主意。
但是往往我们遇到的却是:这样的需求变动也许会不停的发生;更重要的是需求的任何变动可能都要让你将整个类层次结构修改个底朝天……。这种类似的操作分布在不同的类里面,不是一个好现象,我们要对这个结构重构一下了。
那么,访问者模式也许是你很好的选择。
二、定义与结构 ...
1、简单工厂模式,是类的创建模式。
2、工厂模式负责将大量有共同接口的对象实例化。包括三种类型:
简单工厂模式,又叫静态工厂方法模式。
工厂方法模式,又叫多态性工厂模式。
抽象工厂模式,又称工具箱模式。
3、简单工厂模式的角色:
工厂类角色:简单工厂模式的核心,含有与应用相关的业务逻辑。在客户端调用下创建产品对象,往往由一个JAVA类实现。
抽象产品角色:工厂方法模式所创建的类的父类或他们共同的接口,由一个JAVA接口或抽象类实现。
具体产品角色:工厂方法模式所创建的 ...
状态模式(state pattern)和策略模式(strategy pattern)
的实现方法非常类似,都是利用多态把一些操作分配到一组相关的简单的类中,因此很多人认为这两种模式实际上是相同的。然而
在现实世界中,策略(如促销一种商品的策略)和状态(如同一个按钮来控制一个电梯的状态,又如手机界面中一个按钮来控制手
机)是两种完全不同的思想。当我们对状态和策略进行建模时,这种差异会导致完全不同的问题。例如,对状态进行建模时,状态迁移是一个核心内容;然而,在选
择策略时,迁移与此毫无关系。另外,策略模式允许一个客户选择或提供一种策略,而这种思想在状态模式中完全没有。 ...
- 浏览: 8594 次
- 性别:

- 来自: 广州

- 详细资料
搜索本博客
最近加入圈子
最新评论
-
java中堆和堆栈的区别
引用[u][/u][i][/i][b][/b][img][/img][url ...
-- by yinguohui -
阻塞I/O,非阻塞I/O
1、异步与同步的区别:异步不会引起request进程阻塞。而同步会。2、阻塞IO ...
-- by jokermanager -
阻塞I/O,非阻塞I/O
两个问题: 1. "read操作是否阻塞,阻塞I/O是阻塞的,而异步I ...
-- by FGhost






评论排行榜