设计模式
Damon Zhou
做个有意思的人,做点有意义的事。
展开
-
设计模式之建造者模式
基本概念 建造者模式将一个复杂对象的构建与它的表示分离,使得同样的过程可以创建不同的表示。建造者模式内容 建造者模式一般包含以下内容: AbstractBuilder:抽象接口,用于声明建造某种对象所需要的方法,需要创建哪些部分。 ConcreteBuilder:具体建造者,实现抽象接口,具体实现创建各个部分的方法,并且提供创建完的对象实例。 Director:调度器,用于确定建造对象时原创 2016-03-19 19:26:25 · 219 阅读 · 0 评论 -
设计模式之原型模式
什么事原型模式(Prototype)用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象原型模式的核心是一个clone方法优点:性能优良,在内存二进制流的拷贝,不执行构造器使用场景资源优化:类初始化需要消耗非常多的资源性能和安全要求的场景:通过new产生一个对象需要非常繁琐的数据准备或者访问权限一个或者多个对象修改者的场景:一个对象需要提供给其他对象访问,而且各个调用者可能都需要原创 2016-06-25 16:45:20 · 231 阅读 · 0 评论 -
设计模式之享元模式
什么是享元模式(Flyweight)享元模式是池技术的重要实现方式使用共享对象可有效地支持大量的细粒度的对象,避免过多的对象造成内存溢出享元模式:内部状态和外部状态内部状态:保持不变的状态,可以作为共享的状态外部状态:一般随着环境的状态而改变的状态享元对象的角色 Flyweight 抽象享元角色,产品的抽象类,同时定义出对象的外部状态和内部状态的接口或实现。ConcreteFlyweigh原创 2016-06-25 16:40:08 · 182 阅读 · 0 评论 -
设计模式之门面模式
什么是门面模式(Facade)门面模式,也叫作外观模式,是一种常见的封装模式。要求一个子系统的外部与内部的通信必须通过一个统一的对象进行。门面模式提供一个高层次的接口,使得子系统更易于使用。代码示例在我们的日常生活中,通常我们寄送信件的时候,都是通过邮局这一个统一的接口来运作的。对于寄信的我们而言,并不关心邮局怎么进行通信和寄送,简单一点,假设我们只是信的内容的提供者,那么我们只想提供给邮局原创 2016-06-25 16:27:03 · 382 阅读 · 0 评论 -
设计模式之装饰器模式
什么是装饰器模式(Decorator)动态地给一个对象添加一些额外的职责,就增加功能来说,装饰模式相比生成子类更为灵活。装饰器模式的优点装饰类和被装饰类可以独立发展,而不会互相耦合。装饰模式是继承关系的一个替代方案装饰模式可以动态地扩展一个实现类的功能装饰器模式的缺点多层的装饰比较复杂示例代码package com.pattern.decorator;/** * 抽象类,装饰器的父类原创 2016-06-25 16:15:51 · 289 阅读 · 0 评论 -
设计模式之组合模式
什么是组合模式组合模式也叫合成模式,用于描述局部和整体的关系将对象组合成树形结构以展示“部分-整体”的层次结构,似的用户对单个对象和组合对象的使用具有一致性。组合模式的几个角色Component抽象构件角色 定义参加组合对象的共有属性和方法,可以定义一些默认的行为或属性Leaf叶子构件 叶子对象,其下再也没有其他的分支,也就是遍历的最小单位Composite树枝构件 树枝对象,作用是组原创 2016-06-25 16:08:22 · 223 阅读 · 0 评论 -
设计模式之适配器模式
什么是适配器模式将一个类的接口装换成客户端所期待的另一种接口,从而使原本因接口不配而无法一起工作的两个类能够一起工作。适配器包括两种:类适配器和对象适配器,大多数情况下,对象适配器比类适配器更加灵活,作为组件元素而存在。类适配器收到类继承关系的限制。适配器模式的优点适配器模式可以让两个没有任何关系的类一起运行增加类的透明性提高类的复用性灵活性高使用场景想要修改一个已经投产中的接口,主要使原创 2016-06-25 15:15:30 · 295 阅读 · 0 评论 -
设计模式之桥接模式
什么是桥接模式将抽象和实现解耦,使得两者可以独立变化桥接模式的4个角色Abstraction、Implementor、RedefinedAbstraction、ConcreteImplementorAbstraction:抽象化角色,定义出角色的行为,同时保存一个对实现化角色的引用,该角色一般是抽象类,示例中为Corp类Implementor:实现化角色,接口或者抽象类,定义角色必须的行为和属原创 2016-06-25 15:26:10 · 301 阅读 · 0 评论 -
设计模式六大原则
(此处仅作简要概述,待后续完善) 1、开闭原则 即对代码的扩展开放,对代码的修改关闭2、里氏代换原则 任何基类出现的地方,子类也可以出现3、依赖倒转原则 面向接口编程,而不是面向具体实现4、接口隔离原则 使用多个分离的接口,要比使用单一的接口要好5、迪米特法则 一个实体应当尽可能少的知道与其交互的对象的信息; 不违反迪米特法则原创 2016-03-17 12:48:42 · 269 阅读 · 0 评论 -
设计模式之工厂方法模式及代码示例
为什么使用工厂方法 一般创建对象的方式是new关键字来生成,但是这种方式必然地使得客户端程序员的代码和我们的对象产生了过于紧密的耦合,为了解除这样的耦合状态,提高客户端代码灵活性和可扩展性,使用工厂方法模式。工厂方法模式 客户端代码为了获得对象,通过工厂对象生成,客户端代码只需要给工厂实例发送创建对象的消息即可。 代码示例 现在我有如下的接口和类 接口: Product 所有产品类都需原创 2016-03-17 22:30:16 · 593 阅读 · 0 评论 -
设计模式之单例模式
基本概念 单例模式指的是:对于某一个类,整个程序中值存在一个该类的实例对象。常见的比如数据库连接对象等。代码示例,单例模式的几种写法及优劣/** * 饿汉式写法,多线程下不能保证对象的确定性**/public class SingletonHungryUnsec { private static SingletonHungryUnsec instance; private原创 2016-03-19 11:04:40 · 216 阅读 · 0 评论 -
设计模式之抽象工厂模式
为什么使用抽象工厂模式 在工厂方法模式一文中,我们看到,尽管可以通过工厂方法获取所需要的类型的产品对象,但是如果类型增加了,则需要在生成对象的方法中增加逻辑判断的分支,这很明显违背的开闭原则抽象工厂模式 为了不对原有的代码进行修改,又能够在新增产品类型的时候,可以采用工厂方法获得产品,于是我们对工厂类也作一次抽象,做一个抽象工厂类,所有的具体工厂都需要继承自这个抽象工厂类。代码示例 承接工原创 2016-03-19 11:17:55 · 270 阅读 · 0 评论 -
设计模式之代理模式
什么是代理模式(Proxy)为其他对象提供一种代理以控制对这个对象的访问代理模式的几个角色Subject抽象主题角色,可以是一个抽象类或者接口,定义通用的业务RealSubject具体主题角色,被代理角色,是业务具体的执行者Proxy代理主题角色,也是委托类、代理类,负责对真实对象的应用,可以做预处理或者善后处理示例代码(示例中包括基本的代理模式、强制代理、动态代理) 基本的代理模式pa原创 2016-06-25 17:00:11 · 291 阅读 · 0 评论