![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
设计模式
feifeilb
架构设计爱好者
展开
-
敏捷软件开发 - 原则、模式与实践 —— 设计模式(十二)STATE模式
本文为敏捷软件开发 - 原则、模式与实践系列的一部分。本文对应原书第29章STATE模式STATE模式既具有switch/case语句的效率又具有解释迁移表的灵活性。上图展示该模式的结构。Turnstile类拥有关于事件的公有方法以及关于动作的受保护方法。它持有一个指向TurnstileState接口的引用。当Turnstile的两个事件方法中的一个被调用时,它就把这个事件委托给Turn...原创 2020-02-23 18:30:59 · 408 阅读 · 0 评论 -
敏捷软件开发 - 原则、模式与实践 —— 设计模式(十一)VISITOR模式
本文为敏捷软件开发 - 原则、模式与实践系列的一部分。本文对应原书第28章VISTOR模式系列允许在不更改现有层次结构的情况下向其中增加新方法。该系列中的模式如下VISITOR模式ACYCLIC VISITOR模式DECORATOR模式EXTENSION ObJECT模式VISITOR模式这个结构,可以通过增加新的ModemVisitor派生类来增加新的操作系统配置函数,而...原创 2020-01-11 22:57:48 · 296 阅读 · 0 评论 -
敏捷软件开发 - 原则、模式与实践 —— 设计模式(十)PROXY模式和STAIRWAY TO HEAVEN模式
本文为敏捷软件开发 - 原则、模式与实践系列的一部分。本文对应原书第26章PROXY模式PROXY模式具有一个非常大的好处:重要关系的分离。在上面的例子中,业务规则和数据库就被完全分开了。在那些把业务 规则和数据库实现分离显得非常重要的情况中,PROXY模式是很适用的。就此而言,PROXY模式可以用来分离业务规则和任何种类的实现问题。它可以用来防止业务规则被诸如:COM、COBRA、EJB...原创 2020-01-06 21:53:34 · 344 阅读 · 0 评论 -
敏捷软件开发 - 原则、模式与实践 —— 设计模式(九)ABSTRACT SERVER模式、ADAPTER模式和BRIDGE模式
本文为敏捷软件开发 - 原则、模式与实践系列的一部分。本文对应原书第25章ABSTRACT SERVER模式如上图在Switch和Light之间引入一个接口,这样就使得Switch能够控制任何实现了这个接口的东西。这立即就满足了DIP和OCP。这个就是ABSTRACT SERVER模式。请注意接口的名字是从它的客户的角度起的。它被称为Switchable而不是ILight。我们在前面已经...原创 2020-01-06 21:51:38 · 263 阅读 · 0 评论 -
敏捷软件开发 - 原则、模式与实践 —— 设计模式(八)OBSERVER模式
本文为敏捷软件开发 - 原则、模式与实践系列的一部分。本文对应原书第24章上图展示了OBSERVER模式的规范形式。在本例中,Clock被DigitalClock观察。DigitalClock通过Subject接口注册到Clock中。无论任何原因,只要时间一改变,Clock就调用Subject的notify方法。而Subject的notify方法会调用每个已注册Observer对象的upda...原创 2020-01-06 20:43:41 · 163 阅读 · 0 评论 -
敏捷软件开发 - 原则、模式与实践 —— 设计模式(七)COMPOSITE模式
本文为敏捷软件开发 - 原则、模式与实践系列的一部分。本文对应原书第23章COMPOSITE模式是一个非常简单但具有深刻内涵的模式。上图中展示了COMPOSITE模式的基本结构。图中是一个形状类层次结构。基类Shape有两个派生类:Circle和Square。第3个派生类时一个组合体。CompositeShape持有一个含有多个Shape实例的列表。当调用CompositeShape的dr...原创 2020-01-06 20:41:23 · 170 阅读 · 0 评论 -
敏捷软件开发 - 原则、模式与实践 —— 设计模式(六)FACTORY模式
本文为敏捷软件开发 - 原则、模式与实践系列的一部分。本文对应原书第21章工厂模式允许我们只依赖于抽象接口就能创建出具体对象的实例。所以,在正在进行的开发期间,如果具体类时高度易变的,那么该模式是非常有用的。结论工厂是有效的工具。在遵循DIP方面工厂有着重大的作用。它们使得高层策略模块在创建类的实例时无需依赖于这些类的具体实现。它们同样使得在一组类的完全不同系列的实现间进行切换成为可能。...原创 2020-01-06 20:38:49 · 180 阅读 · 0 评论 -
敏捷软件开发 - 原则、模式与实践 —— 设计模式(一)COMMAND模式和ACTIVE OBJECT模式
COMMAND模式COMMAND模式是最简单、最优雅的模式之一。它的适用范围非常广泛。图1ACTIVE OBJECT模式ACTIVE OBJECT模式是我最喜欢使用COMMAND模式的地方之一。这是实现多线程控制的一项古老技术。该模式有多种使用方式,为许多工业系统提供了一个简单的多任务核心。图2结论COMMAND模式的简单性掩盖了它的多功能性。COMMAND模式可以应用于多种不同的美...原创 2019-10-19 17:07:27 · 338 阅读 · 0 评论 -
敏捷软件开发 - 原则、模式与实践 —— 设计模式(五)NULL OBJECT模式
该模式会消除对null进行检查的需要,并且有助于简化代码。public interface Employee { public bool isTimeToPay(DateTime time); public void pay(); public static final Employee NULL = new Employee() { public bool Is...原创 2019-10-19 17:36:47 · 142 阅读 · 0 评论 -
敏捷软件开发 - 原则、模式与实践 —— 设计模式(四)SINGLETON模式和MONOSTATE模式
介绍本节讲述了两个强制对象单一性的模式。这两个模式有着非常不同的“代价/收益”权衡。在大多数情况下,它们的实时代价远低于它们的表达力带来的收益。SINGLETON模式public class Singleton { private static Singleton theInstance = null; private Singleton() {} public static...原创 2019-10-19 17:34:11 · 170 阅读 · 0 评论 -
敏捷软件开发 - 原则、模式与实践 —— 设计模式(三)FACADE模式和MEDIATOR模式
介绍这两个模式有着共同的目的。它们都把某种策略施加到另外这一组对象上。FACADE模式从上面施加策略,而MEDIATOR模式则从下面施加策略。FACADE模式的使用是明显且受限的,而MEDIATOR模式的使用则是不明显且不受限的。FACADE模式图1MEDIATOR模式图2图2展示了QuickEntryMediator的结构。用一个JList和一个JTextField构造了一个Quic...原创 2019-10-19 17:23:40 · 209 阅读 · 0 评论 -
敏捷软件开发 - 原则、模式与实践 —— 设计模式(二)TEMPLATE METHOD模式和STRATEGY模式
介绍TEMPLATE METHOD模式和STRATEGY模式都可以分离通用的算法和具体的上下文。在软件设计中经常会看到这样的需求。我们有一个通用的算法。为了遵循依赖倒置原则(DIP),我们想确保这个通用的算法不要依赖于具体的实现。我们更想使这个通用的算法和具体的实现都依赖于抽象。不同的是,TEMPLATE METHOD模式使用继承来解决问题,而STRATEGY模式使用的则是委托。TEMPLAT...原创 2019-10-19 17:13:51 · 231 阅读 · 0 评论