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

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

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

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

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

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

JDK设计模式(八)装饰模式

1、定义 动态地将责任附加到对象上,若要扩展功能,装饰者提供了比继承更有弹性的替代方案。 2、解决的问题 在不必改变原类文件和使用继承的情况下,动态的扩展一个对象的功能。它是通过创建一个包装对象,也就是装饰来包裹真实的对象,防止类继承带来的爆炸式增长。 3、模式中的角色 1、 抽象构件(Component)角色:给出一个抽象接口,以规范准备接收附加责任的对象。 2、具体构件(ConcreteComponent)角色:定义一个将要接收附加责任的类。 3、装饰 ...

JDK设计模式(七)组合模式

1、定义 将对象组合成树形结构以表示“部分整体”的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。 2、解决的问题 组合模式解耦了客户程序与复杂元素内部结构,从而使客户程序可以像处理简单元素一样来处理复杂元素。 3、模式中的角色 1、抽象构件(component):是组合中对象的接口,适当情况下,实现所有类共有方法的默认行为,声明一个接口,用于管理和访问component子部件 2、 树枝构件(composite):定义具有叶节点的组件的行为 ...

JDK设计模式(六)桥接模式

1、定义 将抽象部分与实现部分分离,使它们都可以独立的变化 2、解决的问题 某个类具有两个或两个以上的维度变化,如果只是用继承将无法实现这种需要,或者使得设计变得相当臃肿,把变化部分抽象出来,使变化部分与主类分离开来,从而将多个维度的变化彻底分离,提供一个管理类来组合不同维度上的变化,通过这种组合来满足业务的需要,从达到抽象化、实现化和脱耦。 3、模式中的角色 1、抽象化(Abstraction)角色:抽象化给出的定义,并保存一个对实现化对象的引用。 2、修正 ...

JDK设计模式(五)适配器模式

1、定义 将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。 2、解决的问题 即Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以在一起工作。 3、模式中的角色 目标接口(Target):客户所期待的接口。目标可以是具体的或抽象的类,也可以是接口。 需要适配的类(Adaptee):需要适配的类或适配者类。 适配器(Adapter):通过包装一个需要适配的对象,把原接口转换 ...

线程池的配置和监控

1、合理的配置线程池 要想合理的配置线程池,就必须首先分析任务特性,可以从以下几个角度来进行分析: 任务的性质:CPU密集型任务,IO密集型任务和混合型任务。 任务的优先级:高,中和低。 任务的执行时间:长,中和短。 任务的依赖性:是否依赖其他系统资源,如数据库连接。 任务性质不同的任务可以用不同规模的线程池分开处理。CPU密集型任务配置尽可能小的线程,如配置Ncpu+1个线程的线程池。IO密集型任务则由于线程并不是一直在执行任务,则配置尽可能多的线程,如2*Ncpu ...

JDK设计模式(四)原型模式

用原型实例指定创建对象的种类,并且通过复制这些原型创建新的对象。 在原型模式中,所发动创建的对象通过请求原型对象来拷贝原型对象自己来实现创建过程,当然所发动创建的对象需要知道原型对象的类型。这里也就是说所发动创建的对象只需要知道原型对象的类型就可以获得更多的原型实例对象,至于这些原型对象时如何创建的根本不需要关心,其类图如下所示。 原型模式主要包含如下三个角色: Prototype:抽象原型类。声明克隆自身的接口。 ConcretePrototype:具体原 ...

JDK设计模式(三)建造者模式

将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示。 建造模式是将复杂的内部创建封装在内部,对于外部调用的人来说,只需要传入建造者和建造工具,对于内部是如何建造成成品的,调用者无需关心,其类图如下。 Product : 产品类,由多个部件构成。 class Product { List<String> parts = new ArrayList<String>(); public void ...