设计模式
wind_dt123
这个作者很懒,什么都没留下…
展开
-
Design Pattern(1)-Template Method Pattern
编程时为了提高复用性、可维护性,我们希望把共性的东西提取到一处,这是很自然的想法。但是往往有的时候不是那么容易提取共性, 因为他只是类似,并非一致,又夹杂着差异。典型的例子是JDBC代码。 那么为了实现这种情况下的复用,唯有使粒度变小,将基本的原子操作提为共性。 类图如下: People类public abstract class People { abstract void cook原创 2017-03-09 11:15:27 · 613 阅读 · 0 评论 -
Design Pattern(9)-Facade Pattern
适用场景1.使一个子系统更容易被外部所使用; 2.将设计很差的API wrap成更合理的API; 3.减少外部对子系统内部的依赖类图原创 2017-03-26 19:13:22 · 756 阅读 · 0 评论 -
Design Pattern(7)-Composite Pattern
适用场景组合模式适用于树形结构。试想一个公司的所有员工,肯定有上下级关系,除了最底层的员工,其他员工都有自己的领导和自己管理的员工。Composite Pattern通过让每个非最底层员工持有自己的直接下属,从而实现这种树形结构。 因为公司的每个员工都具有一些共性,所以为他们设计一个公共父类或者接口,譬如Component或者叫Employee。但是最低层员工和非最底层员工有一些区别,因为最底层员原创 2017-03-26 14:02:30 · 449 阅读 · 0 评论 -
Design Pattern(8)-Interpreter Pattern
适用场景提供一种方式,用来定义语言的文法表达,并解释执行。类图实例代码这个地方,定义了一个加法表达式,为了简单起见,只有加法,没有其他运算,且假设每个变量名长度只有一个字母。 AbstractExpression:public abstract class AbstractExpression { abstract int interpret(Context context);}Term原创 2017-03-26 18:54:22 · 522 阅读 · 0 评论 -
Design Pattern(6)-Adapter Pattern
应用场景试想,你已经有了一个类A,它具有一些功能。但是现在你需要另一些功能,这些功能可以复用A来实现,那么非常自然地应该想到让新的类来持有A的引用,实现组合结构,转发请求来实现新的功能。类图实例代码Target: 你希望有一个完全符合Target接口的类来达到你的功能:public interface Target { void Request();}Adapter,适配器,完成一个连接原创 2017-03-22 16:24:54 · 462 阅读 · 0 评论 -
Design Pattern(5)-Visitor Pattern
典型应用场景一个集合容器,里面有一系列元素,但是不同的元素类型不太一样,例如A,B,C,D,但是不同的元素肯定继承自同一个父类或者实现同一个接口,不妨设为Element,毕竟这样才能在同一个集合数据结构里面。现在你想要遍历这个集合,譬如你想得到每个元素的价格,然后求个总价,自然想到的方法是为Element加一个getPrice()方法,然后每个子类都实现这个方法,每个子类可以根据自己的情况选择不同的原创 2017-03-22 16:04:02 · 628 阅读 · 0 评论 -
Design Pattern(11)-Iterator Pattern
适用场景用于遍历容器,隐藏访问细节,为所有的容器提供统一的遍历接口。类图实例代码我写了一个int的容器用来简单说明一下 Aggregate:public interface Aggregate { Iterator iterator(); int get(int index);}ConcreteAggregate:public class ConcreteAggregate im原创 2017-03-26 20:24:53 · 702 阅读 · 0 评论 -
Design Pattern(4)-Decrator Pattern
装饰者模式,比前面几种design pattern都复杂,一般情况下并不应该用它。它是为了尽量不修改原有类、接口的情况下为其动态添加功能。但是如果允许修改原有类,我觉得还是应该修改原有类,以达到更好的设计。用了装饰者模式,复杂度增加,不便于后续维护,好处是不需要修改现有的接口啊,不需要动其他使用该类的程序。 下面以一个麦当劳的例子,去麦当劳点一个果汁juice,你需要动态地实现加冰块、糖甚至其原创 2017-03-09 22:47:33 · 476 阅读 · 0 评论 -
Design Pattern(3)-State Pattern
学过编译原理应该知道有限状态机,状态模式就是适用于那种希望 一个对象在不同状态下呈现不一样的行为的一种design pattern。我们以一个实例来诠释,有一个Door对象,Door对象有两个状态:OpenState,ClosedState,当我们提交一个请求的时候,它若在OpenState状态,希望它能执行关闭操作,它若在ClosedState状态,希望它能执行打开操作。官方类图: State:原创 2017-03-09 20:55:47 · 521 阅读 · 0 评论 -
Design Pattern(2)-Strategy Pattern
试想这样的场景,一个员工,在面向对象设计里,它自己维护了自己的工作时长,职位类型等成员变量,那么我们做公司管理系统时就可能希望将计算工资这个方法放在员工类里,当我们想要知道一个员工的工资,就调用这个员工的getSalary()方法。但是问题是一个员工的工资计算策略可能会变,今天他是固定工资,明天经理觉得他表现不错,就想把他改成别的工资策略了说不定。因此该场景下,Context就是一个Worker,W原创 2017-03-09 16:35:32 · 411 阅读 · 0 评论 -
Design Pattern(10)-Immutable Pattern
适用场景制作不变类,为了安全性之类的考量。弱不变模式与强不变模式这一点参考两种不变模式的定义 这篇文章中讲的多线程的问题,个人理解如下:A线程遍历users数组还没遍历到users[2],假设users[2]不是vip,B线程因为共享这个数组,却可以修改它,那么修改完了再等A来访问到users[2],那么发现它是vip了。所以A判断的结果不是它那个时间点应得的结果,可能出现同步问题。但是它最后说的原创 2017-03-26 19:55:48 · 596 阅读 · 0 评论