JDK设计模式(十五)迭代器模式

1. 概述迭代器模式提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露其内部的表示。 2. 解决的问题把游走的任务放在迭代器上,而不是聚合上,这样简化了聚合的接口和实现,也让责任各得其所。 3. 模式中的角色1、抽象迭代器(Iterator):定义出遍历元素所需的接口。2、具体迭代器(ConcreteIterator):实现 Iterator 接口,并保持迭代过程中的游标位置。3、聚集(Aggregate):给出创建迭代器(Iterator)对象的接口。4、具体聚集(ConcreteAggregate):实现创建迭代器(Iterator)对象的接口,返回一个合适的具体迭代器实例。5、客户 ...

JDK设计模式(十四)观察者模式

1. 概述有时被称作发布/订阅模式,观察者模式定义了对象之间的一对多的依赖关系,这样一来,当一个对象改变状态时,它的所有依赖着都会收到通知并自动更新。 2. 解决的问题将一个系统分割成一个一些类相互协作的类有一个不好的副作用,那就是需要维护相关对象间的一致性。我们不希望为了维持一致性而使各类紧密耦合,这样会给维护、扩展和重用都带来不便。观察者就是解决这类的耦合关系的。 3. 模式中的角色1、抽象主题(Subject):它把所有观察者对象的引用保存到一个聚集里,每个主题都可以有任何数量的观察者。抽象主题提供一个接口,可以增加和删除观察者对象。2、具体主题(ConcreteSubject ...

JDK设计模式(十三)模板方法模式

1、概述定义一个操作中的算法的骨架,而将步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义算法的某些特定步骤。 2、模式中的角色抽象模板类(AbstractTemplate):实现了模板方法,定义了算法的骨架。具体模板类(ConcreteTemplate):实现抽象类中的抽象方法,已完成完整的算法。 3、模式解读模板方式模式的类图如下所示模板方法中的方法可以分为两大类:模板方法和基本方法。模板方法,一个模板方法是定义在抽象类中的,把基本操作方法组合在一起形成一个总算法或一个总行为的方法。一个抽象类可以有任意多个模板方法,而不限于一个。每一个模板方法都可以调用任意多个具体方法。 ...

深入理解jvm虚拟机

每个 Java 开发者都知道 Java 字节码是执行在 JRE((Java Runtime Environment Java 运行时环境)上的。JRE 中最重要的部分是 Java 虚拟机(JVM),JVM 负责分析和执行 Java 字节码。Java 开发人员并不需要去关心 JVM 是如何运行的。在没有深入理解 JVM 的情况下,许多开发者已经开发出了非常多的优秀的应用以及 Java 类库。不过,如果你了解 JVM 的话,你会更加了解 Java 的,并且你会轻松解决那些看似简单但是无从下手的问题。 本系列主要从以下几个方面进行分析1、Java 内存区域与内存溢出2、垃圾收集算法以及垃圾收集器 ...

JDK设计模式(十二)策略模式

1、定义策略模式,又叫算法簇模式,就是定义了不同的算法族,并且之间可以互相替换,此模式让算法的变化独立于使用算法的客户。 2、解决的问题可以动态的改变对象的行为。 3、模式中的角色1、环境对象(context):该类中实现了对抽象策略中定义的接口或者抽象类的引用。2、抽象策略对象(Strategy):它可由接口或抽象类来实现。3、具体策略对象(ConcreteStrategy):它封装了实现同不功能的不同算法。利用策略模式构建应用程序,可以根据用户配置等内容,选择不同有算法来实现应用程序的功能。具体的选择有环境对象来完成。采用这种方式可以避免由于使用条件语句而带来的代码混乱,提高应用程序的灵活 ...

JDK设计模式(十一)代理模式

1、定义为另一个对象提供一个替身或占位符以控制对这个对象的访问。 2、解决的问题在某些情况下,一个对象不想或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用,提供额外的处理或者不同的操作。 3、模式中的角色1、抽象主题角色(Subject):声明真实对象和代理对象的共同接口;2、 代理角色(Proxy):代理对象角色内部含有对真实对象的引用,从而可以操作真实对象,同时代理对象提供与真实对象相同的接口以便在任何时刻都能代替真实对象。同时,代理对象可以在执行真实对象操作时,附加其他的操作,相当于对真实对象进行封装。3、真实主题角色(RealSubject):代理角色所代 ...

JDK设计模式(十)享元模式

1、定义采用一个共享来避免大量拥有相同内容对象的开销。 2、解决的问题使用共享物件,用来尽可能减少内存使用量,以及分享资讯给尽可能多的相似物件;适合用于只是因重复而导致使用无法令人接受的大量内存的大量物件。 3、模式中的角色内蕴状态存储在享元内部,不会随环境的改变而有所不同,是可以共享的;外蕴状态是不可以共享的,它随环境的改变而改变的,因此外蕴状态是由客户端来保持(因为环境的变化是由客户端引起的)。在每个具体的环境下,客户端将外蕴状态传递给享元,从而创建不同的对象出来。享元模式可分为:单纯享元模式和复合享元模式。1、 抽象享元角色(Flyweight):为具体享元角色规定了必须实现的方法,而外 ...

JDK设计模式(九)外观模式

1、定义提供一个统一的接口,用来访问子系统中的一群接口。外观定义了一个高层接口,让子系统更容易访问。 2、解决的问题通过外观的包装,使应用程序只能看到外观对象,而不会看到具体的细节对象,降低应用程序的复杂度,并且提高了程序的可维护性。封装一组交互类,一致地对外提供接口,简化子系统调用。 3、模式中的角色1、外观角色(Facade):是模式的核心,他被客户 client 角色调用,知道各个子系统的功能。同时根据客户角色已有的需求预订几种功能组合。2、子系统角色(Subsystem classes):实现子系统的功能,并处理由 Facade 对象指派的任务。对子系统而言,facade 和 clie ...