随笔分类 - 设计模式
摘要:状态模式(State)定义:允许对象在内部状态改变时改变它的行为,对象看起来好像修改了它的类。 UML类图: 状态模式适用于要转换很多业务状态的场景。比如,Head First举的糖果机例子, 糖果机有“没有投币”、“有投币”、“售出糖果”、“糖果售罄”四种状态,并且有四种动作:“投入硬币”、“返回
阅读全文
摘要:组合模式(Composite)定义:将对象组合成树形结构以表示“部分-整体”的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。 UML类图如下: 比如《大话》中举的例子,公司总部在北京,然后在南京、杭州设有办事处,总公司和分支办事处都有相似的组织结构,比如都有人力资源部、财务部等。如
阅读全文
摘要:迭代器模式(Iterator)定义:提供一种顺序访问聚合对象中各个元素的方法,而又不暴露其内部的表示。 实际上现在很多语言都自带迭代器,无需我们单独实现,比如c#中的foreach-in,但通过学习迭代器模式,我们可以看到类似foreach-in这种语法背后的逻辑,同时感受一下GOF所在的那个时代大
阅读全文
摘要:模板方法模式(Template Mothod):在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤。 UML类图如下: 要点有两个:原语操作PrimitiveOperation以及钩子Hook()方法。 代码举例 1 pu
阅读全文
摘要:外观模式(Facade)定义:提供了一个统一的接口,用来访问子系统中的一组接口。此模式定义了一个高层接口,让子系统更易于使用。 类图如下: Facade类封装了SubSystem的方法或接口,Client只需与Facade交互。比如,如果SybSystem是单支股票,那么基金就可以认为是他们的Fac
阅读全文
摘要:适配器模式(Adaptor):将一个类的接口转换成客户希望的另一个接口。适配器让原本接口不兼容的类可以一起工作。 类似于我们日常生活中的电源适配器,提供了低压直流电和220V交流电之间的适配。 适配器有两种形式:对象适配器和类适配器。两者的类图分别如下: 对象适配器: Adapter完成Target
阅读全文
摘要:一、单例模式 单例模式可以保证一个类仅有一个实例,这个模式应该跟简单工厂一样常用了吧,但对我来说,以前都是瞎用,这是第一次深度学习单例模式。 最简单的单例模式代码是这样的: class Singleton { private static Singleton _instance; private S
阅读全文
摘要:一 简单工厂 将代码中负责根据不同情况创建不同类的if else 或者switch case语句抽提出来就构成了简单工厂,即简单工厂专门负责类的生产。 比如,head first中举的pizza例子,用SamplePizzaFactory负责根据客户的选择创建ChessPizza、GreekPizz
阅读全文
摘要:装饰者模式(Decorator):动态地将职责附加到对象上,若要扩展功能,装饰者提供了比继承更有弹性的替代方案。 UML如下: 按照《大话》的解释:Component定义了一个对象接口(超类型),可以给这些对象动态地添加职责。ConcreteComponent是一个具体的对象,接下来的实例代码主要给
阅读全文
摘要:一、观察者模式总览 观察者模式定义了对象之间的一对多依赖,让多个观察者对象同时监听一个主题对象,当主题对象改变状态时,它的所有依赖者都会收到通知并自动更新。 UML类图如下: Subject为主题抽象对象,Observer为观察者抽象对象,主题对象中规定了“订阅”、“取消订阅”、“通知”等必要的方法
阅读全文
摘要:策略模式:定义了算法族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化独立于使用算法的客户。 比如超市收银软件,针对超市的不同销售策略(打八折、满300减50等),需要运用不同的算法。策略模式就可以适用于这种场合。这里打折、满减等作为一个算法族,继承自同一的父类;这些算法作为程序中经常变化
阅读全文
摘要:学习设计模式的过程中,发现相关的作者们都会用UML类图来表示一个模式的整体脉络,这种方式确实直观明了,既能体现宏观思路、又能兼顾实现细节。真的是很妙的工具。在开始正式学习设计模式之前,有必要对UML有个大概的掌握。然后,日后有望解锁更多关于UML方面的技能,比如说:建模。哈哈,有点小兴奋呢。 UML
阅读全文