随笔分类 - Design Pattern
摘要://Subject 定义RealSubject和Proxy的共同接口,这样可以在任何使用RealSubject的地方都可以用Proxy。public abstract class Subject { public abstract void request(); } //Rea...
阅读全文
摘要:建造模式 有些情况,一个对象会有一些重要的性质,在它们没有恰当的值之前,对象都不能为一个完整的产品使用。比如一封Email,必须有发件人地址、主题、内容等信息,否则是不能发送出去的。此时,这对象相当于一个有待建造的产品,而对象的性质相当于产品的零件。建造产品的过程就是建造零件的过程,建造者返回给客户...
阅读全文
摘要:多例模式单例模式的推广,可以有多个实例。多例类必须自己创建,管理自己的实例,并向外界提供自己的实例。有上限的多例模式 无上限的多例模式
阅读全文
摘要:抽象工厂模式与工厂方法模式最大的区别在于:工厂方法模式针对的是一个产品等级结构,而抽象工厂模式需要面对多个产品等级结构。/* * 标识接口 * */public interface ProductA{ }/* * 标识接口 * */public interface ProductB{ }public class ContreteProductA1 implements ProductA{ public ContreteProductA1(){ //do someting }}public class ContreteProductA2 implements...
阅读全文
摘要:简单工厂的缺点对于“开-闭”原则的支持不够,因为如果有新的产品加入系统中,就要修改工厂类,将必要的逻辑加入工厂类中。 工厂方法模式是简单工厂模式的进一步抽象和推广。由于使用了多态,工厂方法模式保持了简单工厂模式的优点,也克服了它的缺点。 在工厂方法模式中,核心的工厂类不再是负责所有产品的创建,而是将...
阅读全文
摘要:解释器模式:给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。 如果一个特定的类型的问题发生的频率足够高,那么可能就值得将该问题的各个实例表述为一个简单语言中的句子。这样可以构造一个解释器,该解释器通过解释这些句子来解决该问题。当有一个语言需要解释,并且...
阅读全文
摘要:访问者模式(Visitor):表示一个作用于某对象结构中的各元素的操作。它使你可以不改变各元素的类的前提下定义作用于这些元素的新操作。 访问者模式适用于数据结构相对稳定的系统,它把数据结构和作用于操作之间的耦合解脱开,使得操作集合可以相对自由地演化。 访问者模式的优点就是增添新的操作比较容易,因为增...
阅读全文
摘要:享元模式:运用共享技术有效地支持大量细粒度的对象。享元模式可以避免大量相似类的开销,在程序设计中,有时需要生成大量细粒度的类实例来表示数据。如果能发现这些类实例除了几个参数外基本相同,有时就能够大幅度减少需要实例化的类的数量。如果能把那些参数移动到类实例的外面,有方法调用时将它们传递进来,就可以通过共享大幅度减少单个实例的数目。如果一个应用程序使用大量的对象,而大量的对象造成了很多的存储开销时就应该考虑;还有就是对象的大多数状态可以外部状态,如果删除了对象的外部状态,那么可以用相对较少的共享对象取代很多组对象,此时可以考虑享元模式。Flyweight:它是所有具体共享的超类或接口,通过这个接口
阅读全文
摘要:中介者模式:用一个中介对象来封装一系列的对象交互。中介者使各个对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。 中介者模式很容易在系统中应用,也容易在系统中误用。当系统出现了“多对多”交互复杂的对象群时,不要急于使用中介者模式,从而反思你的系统在设计中是否合理。 Med...
阅读全文
摘要:职责链模式:使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合度。将这个对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。 接收者和发送者都没有对方的明确信息,且链中的对象自己也并不知道链的结构。结果是职责链可简化对象的相互连接,它们仅需保持一个指向后继者的引用,而不...
阅读全文
摘要:命令模式:将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日记,以及支持可撤销的操作。 命令模式把请求一个操作的对象与知道怎么执行一个操作的对象分割开。 优点:1、它能较容易设计一个命令队列。2、需要的情况下,可以较容易地将命令记入日记。3、允许接收请求的一方决...
阅读全文
摘要:桥接模式:将抽象部分和它实现的部分分离,使得它们都可以独立地变化。 什么叫抽象与它的实现分离,并不是说,让抽象与其派生类分离,因为这是没有任何意义。实现是指抽象类和它的派生类用自己的对象。如:手机既可以按照品牌来分类,也可以按照功能来分类。 Bridge模式是构造型的设计模式之一。Bridge模式基...
阅读全文
摘要:Java中单例模式是一种常见的设计模式,单例模式分三种:懒汉式单例、饿汉式单例、登记式单例三种。 单例模式有一下特点: 1、单例类只能有一个实例。 2、单例类必须自己自己创建自己的唯一实例。 3、单例类必须给所有其他对象提供这一实例。 单例模式确保某个类只有一个实例,而且自行实例化并向整个系统提供这...
阅读全文
摘要:组合模式是整体与部分的关系,一个典型的应用就是树型结构,组合模式可以抽象出三种角色,分别为抽象构建角色(Component)、树枝构建角色(Composite)、树叶构建角色(Leaf)。 抽象构建角色:这是一个抽象的角色,它给参加组合的对象规定了统一的接口,给出了公有的接口和行为。树枝构建角色:...
阅读全文
摘要:备忘录模式:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该状态恢复到原先保存的状态。要保存的细节封装到Memento中,哪一天要更改保存的细节也不用影响客户端了。备忘录模式所涉及的角色有三个:备忘录(Memento)角色、发起人(Originator)角色、负责人(Caretaker)角色。 1 //备忘录,负责记录Originator的状态,并防止Originator以外其它对象访问。 2 public class Memento { 3 4 private int attack; 5 private int defense; ...
阅读全文
摘要:适配器模式:将一个类的接口转换成客户希望的另外一个接口,Adapter模式使得原本由于接口不兼容而不能在一起工作的那些类可以一起工作。 系统的数据与行为正确,但接口不符合时,我们应该考虑适配器模式,目的是使控制范围之外的一个原本对象与某个接口匹配。适配器模式主要应用于希望复用一些现存的类,但接口又与...
阅读全文
摘要:状态模式(State):当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类。 状态模式主要解决的是当控制一个对象状态转换的条件表达式过于复杂的情况。把状态的判断逻辑转移表示不同状态的一系列类当中,可以把复杂的判断逻辑简化。 状态模式好处:将特定的状态相关的行为局部化,并且将不同状...
阅读全文
摘要:外观模式:为子系统中的一组接口提供了一个一致的界面,此模式定义了一个高层的接口,这个接口使得一子系统更加容易使用。 它主要解决的问题是:组件的客户和组件中各种复杂的子系统有了过多的耦合,随着外部客户程序和各子系统的演化,这种过多的耦合面临很多变化的挑战。 体现了依赖倒转和迪米特法则 1 cl...
阅读全文
摘要:===========创建型模式 1、ABSTRACT FACTORY—追MM少不了请吃饭了,麦当劳的套餐和肯德基的套餐都是MM爱吃的东西,虽然口味有所不同,但不管你带MM去麦当劳或肯德基,只管向服务员说“两个B套餐”就行了。麦当劳和肯德基就是B套餐的Absctract Factory, B套餐里含有汉堡, 鸡翅和饮料. 麦当劳或肯德基会根据B套餐的规格, 让汉堡Factory, 鸡翅Factory, 饮料Factory分别生产对应B套餐的材料. 抽象工厂模式:客户类和工厂类分开。消费者任何时候需要某套产品集合时,只需向抽象工厂请求即可。抽象工厂会再向具体的工厂生产出符合产品集规格的产品...
阅读全文
摘要:模板方法模式:定义一个操作中算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可以重定义该算法某些特定步骤。特点:模板方法模式是通过把不变的行为放到超类中,去除子类中重复的代码来体现它的优势。提供了一个很好的复用平台。当不变和可变的行为方法的子类实现中混合在一起的时候,不变的行为会在子类中重复实现。我们通过模板方法模式把这些行为搬移到单一的地方,这样就帮助子类摆脱重复的不变行为的纠缠。当我们要完成某一细节层次一致的一个过程或者一个系列的步骤,但其个别步骤在更详细的层次上的实现可能不同的时候,通常考虑模板方法模式来处理。 1 public abstract clas
阅读全文
浙公网安备 33010602011771号