模式定义 给定一个语言,定义它的文法的一种表示,并定义一种解释器,这个解释器使用该表示来解释语言中的句子。 解释器模式的优点 解释器是一个简单语法分析工具, 它最显著的优点就是扩展性, 修改语法规则只要修改相应的非终结符表达式就可以了, 若扩展语法, 则只要增加非终结符类就可以了。 解释器模式的缺点 ● 解释器模式会引起类膨胀 ● 解释器模式采用递归调用方法 ● 效率问题 解释器模式的使用场景 ●
模式定义 在不破坏封装性的前提下,捕获、企对象的内部状态,并在该对象之外保存这个状态。这样以后就可以将该对象恢复到原先保存的状态。 备忘录模式的使用场景 ● 需要保存和恢复数据的相关状态场景。 ● 提供一个可回滚(rollback) 的操作; 比如Word中的CTRL+Z组合键, IE浏览器中的后 退按钮, 文件管理器上的backspace键等。 ● 需要监控的副本场景中。 例如要监控一个对象的属
模式定义 表示一个作用于某对象结构中的各元素的操作。使得可以在不改变(稳定)各元素的类的前提下定义(扩展)作用于这些元素的新操作(变化)。 class Visitor; class Element { public: virtual void accept(Visitor& visitor) = 0; //第一次多态辨析 virtual ~Element() {} }; class Eleme
模式定义 动态(组合)地给一个对象增加一些额外的职责。就增加功能而言,Decorator模式比生成子类(继承)更为灵活(消除重复代码 & 减少子类个数) 要点解析 通过采用组合而非继承的手法, Decorator模式实现了在运行时动态扩展对象功能的能力,而且可以根据需要扩展多个功能。避免了使用继承带来的“灵活性差”和“多子类衍生问题”。 Decorator类在接口上表现为is-a Componen
模式定义 定义对象间的一种一对多(变化)的依赖关系,以便当一个对象(Subject)的状态发生改变时,所有依赖于它的对象都得到通知并自动更新 要点总结 使用面向对象的抽象,Observer模式使得我们可以独立地改变目标与观察者,从而使二者之间的依赖关系达致松耦合。 目标发送通知时,无需指定观察者,通知(可以携带通知信息作为参数)会自动传播。 观察者自己决定是否需要订阅通知,目标对象对此一无所知。
模式定义 用一个中介对象来封装(封装变化)一系列的对象交互。中介者使各对象不需要显式的相互依赖>运行时依赖),从而使其耦合松散(管理变化),而且可以独立地改变它们之间的交互。 中介者模式的优点 中介者模式的优点就是减少类间的依赖, 把原有的一对多的依赖变成了一对一的依赖,同事类只依赖中介者, 减少了依赖, 当然同时也降低了类间的耦合。 中介者模式的缺点 中介者模式的缺点就是中介者会膨胀得很大, 而
模式定义 将一类的接口转换成客户希望的另一个接口,Adaptor模式使得原本由于接口不兼容而不能工作的那些类可以一起工作。 适配器模式的优点 适配器模式可以让两个没有任何关系的类在一起运行, 只要适配器这个角色能够搞定他们就成。 增加了类的透明性 提高了类的复用程度 灵活性非常好 适配器模式的使用场景 你有动机修改一个已经投产中的接口时, 适配器模式可能是最适合你的模式。 适配器模式最好在详细设计
模式定义 为其他对象提供一种代理控制(隔离,使用接口)对这个对象进行访问。 class ISubject { public: virtual void process(){} }; //Proxy的设计 class SubjectProxy:public ISubject { public: virtual void process() { //对RealSubject的一种间接访问 }
为系统中一组接口提供一个(稳定)的界面,Facade定义了一个高层接口,这个接口使得子系统更加容易复用。 门面模式的优点: 减少系统的相互依赖 提高了灵活性 提高安全性 门面模式的缺点: 门面模式最大的缺点就是不符合开闭原则, 对修改关闭, 对扩展开放, 看看我们那个门面对象吧, 它可是重中之重, 一旦在系统投产后发现有一个小错误, 你怎么解决? 完全遵从开闭原则, 根本没办法解决。 继承? 覆写
建造者模式的优点: 封装性 建造者独立,易于扩展 便于控制细节风险 建造者模式使用的场景: 相同的方法, 不同的执行顺序, 产生不同的事件结果时, 可以采用建造者模式多个部件或零件, 都可以装配到一个对象中, 但是产生的运行结果又不相同时, 则可以使用该模式。产品类非常复杂, 或者产品类中的调用顺序不同产生了不同的效能, 这个时候使用建造者模式非常合适。 class House{}; class
主要内容:实现,步骤 1,StudentVO.java,步骤 2,StudentBO.java,步骤 3,TransferObjectPatternDemo.java,步骤 4传输对象模式(Transfer Object Pattern)用于从客户端向服务器一次性传递带有多个属性的数据。传输对象也被称为数值对象。传输对象是一个具有 getter/setter 方法的简单的 POJO 类,它是可序列化的,所以它可以通过网络传输。它没有任何的行为。服务器端的业务类通常从数据库读取数据,然后填充 PO
主要内容:实现,步骤 1,DependentObject1.java,DependentObject2.java,步骤 2,CoarseGrainedObject.java,步骤 3,CompositeEntity.java,步骤 4,Client.java,步骤 5,CompositeEntityPatternDemo.java,步骤 6组合实体模式(Composite Entity Pattern)用在 EJB 持久化机制中。一个组合实体是一个 EJB 实体 bean,代表了对象的图解。当更
主要内容:实现,步骤 1,BusinessService.java,步骤 2,EJBService.java,JMSService.java,步骤 3,BusinessLookUp.java,步骤 4,BusinessDelegate.java,步骤 5,Client.java,步骤 6,BusinessDelegatePatternDemo.java,步骤 7业务代表模式(Business Delegate Pattern)用于对表示层和业务层解耦。它基本上是用来减少通信或对表示层代码中的业务
主要内容:介绍,实现,Shape.java,Rectangle.java,Square.java,Circle.java,Color.java,Red.java,Green.java,Blue.java,AbstractFactory.java,ShapeFactory.java,ColorFactory.java,FactoryProducer.java,AbstractFactoryPatternDemo.java抽象工厂模式(Abstract Factory Pattern)是围绕一个超级
主要内容:什么是 GOF(四人帮,全拼 Gang of Four)?,设计模式的使用,设计模式的类型,设计模式的六大原则设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。 设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了重用代码、让代码更容易被他人理解、保证代码