设计模式(Design Pattern)
kongshuchen
这个作者很懒,什么都没留下…
展开
-
模板方法设计模式
package Template_Method_Pattern; /** * 模板设计模式:定义一个操作中的算法框架,而将一些步骤延迟到子类中。使得子类可以不改变一个 * 算法的结构即可重定义该算法的某些特定步骤。 * AbstractClass包含了基本方法和模板方法。其中基本方法是抽象方法由子类来实现;模板方法一般 * 是一个或多个具体的方法也就是一个框架,实现了对基本方法的调度,完成固原创 2016-05-11 22:10:19 · 252 阅读 · 0 评论 -
组合模式(composite)
组合模式的使用场景: 把部分和整体的关系用树型结构来表示,从而使客户端可以使用统一的方式处理部分对象和整体对象。 组合模式的核心: 抽象构件(Component)角色:定义了叶子和容器的共同点; 叶子(Leaf)构件角色:无子节点; 容器(Composite)构件角色:有容器特征,可以包含子节点;下面用代码来说明: 创建各种抽象组件:/** * 抽象组件 * @author Admi原创 2016-07-28 23:50:19 · 311 阅读 · 0 评论 -
装饰模式(decorator)
装饰模式(decorator)也叫包装器模式(Wrapper)。它可用降低系统的耦合度,可用动态的增减或者删除对象的职责,并使得需要装饰的具体构建类和具体装饰类可以独立变化,以便增加新的具体构建类和具体装饰类。装饰模式的职责: 1.动态的为一个对象增加新的功能; 2.装饰模式是一种用于代替继承的技术,无需通过继承增加子类就能扩展对象的新功能。使用对象的关联关系代替继承关系,更加灵活,同时可以避免原创 2016-07-29 08:16:56 · 252 阅读 · 0 评论 -
外观模式
首先介绍一下迪米特法则(最少知识原则): 一个软件实体应当尽可能少的与其他实体发送相互作用。 外观模式就是迪米特法则的体现,它为系统提供统一的入口。封装子系统的复杂性,便于客户端调用。用代码来说明: 1.如果有人需要开店,那么他就需要到工商局,税务局,银行,质监局办理各种手续,创建上面的各种类:public interface 工商局 { void checkName(); //核原创 2016-07-29 08:54:31 · 227 阅读 · 0 评论 -
享元模式(FlyWeight)
享元模式使用场景: 内存属于稀缺资源,不要随便浪费。如果有很多个完全相同或相似的对象,我们可以用通过享元模式,节省内存。享元模式的核心: 1.享元模式以共享的方式高效的支持大量细粒度对象的重用。 2.享元对象能做到共享的关键是区分了内部状态和外部状态。内部状态:可以共享,不会随环境变化而改变;外部状态:不可以共享,会随环境变化而改变。享元模式的实现: 1.FlyWeight享元工厂类:创建并原创 2016-07-29 10:10:17 · 406 阅读 · 0 评论 -
责任链模式(chain of responsibility)
责任链模式定义:将能够处理同一类请求的对象连成一条链,所提及的请求沿着链传递,链上的对象逐个判断是否有能力处理该请求,如果能则处理,如果不能则传递给链上的下一个对象。责任链属于行为型模式的一种。行为型模式关注系统中对象之间的相互交互,研究系统在运行时对象之间的相互通信和协作,进一步明确对象的职责。下面使用公司请假的例子来说明: 1.创建请假请求者public class LeaveRequest原创 2016-07-29 11:10:08 · 235 阅读 · 0 评论 -
迭代器模式(Iterator)
迭代器模式的定义:提供一种可以遍历聚合对象的方式,又称为:游标cursor模式。其中聚合对象负责存储数据;迭代器负责遍历数据。下面用代码来实现自定义的迭代器: 1.创建迭代器接口:/** * 自定义的迭代器接口 * @author Administrator * */ public interface MyIterator { void first(); //将游标指向第一个原创 2016-07-29 11:32:55 · 283 阅读 · 0 评论 -
中介者模式(Mediator)
中介者模式的核心:如果一个系统中对象之间的联系呈现为网状结构,对象之间存在大量多对多关系,将导致关系及其复杂,这些对象称为“同事对象”。这里可以引入一个中介者对象,使各个同事只跟中介者对象打交道,将复杂的网络结构化解成星型结构。用公司部门管理的例子来说明: 1.创建中介者接口与部门接口:public interface Mediator { void register(String dnam原创 2016-07-29 13:33:12 · 390 阅读 · 0 评论 -
命令模式(command)
命令模式:将一个请求封装为一个对象,从而使我们可用不同的请求对客户进行参数化;对请求排队或者记录请求日志,以及支持可撤销的操作。也称之为:动作Action模式,事务Transaction模式。命令模式的结构: 1.Command 抽象命令类 2.ConcreteCommand 具体命令类 3.Invoker 调用者/请求者:请求的发送者,它通过命令对象来执行一个请求。一个调用者并不需要再设计的原创 2016-07-29 14:29:25 · 373 阅读 · 0 评论 -
策略模式(strategy)
策略模式对应于解决某一问题的一个算法族,允许用户从该算法族中任选一个算法解决某一问题,同时可以方便的更换算法或者增加新的算法,并且由客户端选择调用哪个算法。 本质:分离算法,选择实现。下面是代码实现: 1.首先,创建Strategy接口:public interface Strategy { public double getPrice(double standardPrice); }原创 2016-07-29 15:33:42 · 458 阅读 · 0 评论 -
模板方法模式(template method)
模板方法模式是编程中常用的模式。它定义了一个操作中的算法骨架,将某些步骤延迟到子类中实现。这样,新的子类可以在不改变一个算法结构的前提下重新定义该算法的某些特定步骤。模板方法模式的核心: 处理某个流程的代码已经都具备,但是其中某个节点的代码暂时不能确定。因此,我们采用工厂方法模式,将这个节点的代码实现转移给子类完成。即:处理步骤父类中定义好,具体实现延迟到子类中定义。下面用代码说明:public原创 2016-07-29 16:18:14 · 419 阅读 · 0 评论 -
状态模式(state)
状态模式的核心:用于解决系统中复杂对象的状态转换以及不同状态下行为的封装问题。应用场景:当需要频繁的修改状态时,考虑使用状态模式。状态模式的结构: 1.Context环境类:环境类中维护一个State对象,它是定义了当前的状态; 2.State抽象状态类; 3.ConcreteState具体状态类:每一个类封装了一个状态对应的行为。下面用代码来说明: 1.创建State接口与不同的State原创 2016-07-29 17:29:56 · 285 阅读 · 0 评论 -
观察者模式(Observer)
观察者模式主要用于1:N的通知。当一个对象(目标对象Subject或Objservable)的状态变化时,他需要及时告知一系列对象(观察者对象Observer),令它们做出响应。通知观察者的方式: 1.推:每次都会把通知以广播的形式发送给所有观察者,所有观察者只能被动的接收。 2.拉:观察者只要知道有情况即可。至于什么时候获取内容,获取什么内容,都可以自主决定。下面用代码来说明: 1.创建目标原创 2016-07-29 18:27:55 · 361 阅读 · 0 评论 -
桥接模式
桥接模式的要点:处理多维度变化的场景,将各个维度设计成独立的继承结构,使各个维度可以独立的扩展在抽象层建立关联。 首先看一个常见的例子: 未使用桥接模式的类图如下: 实现的代码如下:public interface Computer { void sale(); }class Desktop implements Computer { @Override public原创 2016-07-28 22:05:57 · 395 阅读 · 0 评论 -
代理模式(Proxy)二 动态代理
介绍一下jdk自带动态代理。 java.lang.reflect.Proxy和java.lang.reflect.InvocationHandler 使用动态代理,还可以完成对实现了某些接口的类的特定方法进行改造。 下面用代码来说明: 1.首先还是创建Star接口和真实明星的对象:package com.bjsxt.proxy.dynamicProxy;public interface St原创 2016-07-28 16:46:22 · 324 阅读 · 0 评论 -
建造者设计模式
package Builder_Pattern;import java.util.ArrayList; /** * 建造者设计模式:将一个复杂对象的构建于它的表示分离,使得同样的构建过程可以创建不同的表示。 * 在建造者设计模式中,有如下的3个角色: * 1.Product产品类 * 通常是实现了模板方法模式 * 2.Builder抽象建造者 * 规范产品的组建,一般是由子类来实原创 2016-05-11 22:17:55 · 265 阅读 · 0 评论 -
模板方法设计模式扩展(Hook Method)
package Template_Method_Pattern;import java.util.Scanner;/** * 模板方法模式的扩展 * 钩子方法(Hook Method) * @author dd * */ public class demo2 { public static void main(String[] args) { System.out.原创 2016-05-11 22:16:31 · 2238 阅读 · 0 评论 -
单例设计模式续--有上限的多例设计
package Singleton_Pattern;import java.util.ArrayList; import java.util.Random;//让一个类最多产生指定数量的对象,即有上限的多例模式 public class demo3 { public static void main(String[] args) { int ministerNum = 5;原创 2016-05-09 18:59:33 · 729 阅读 · 0 评论 -
单例设计模式
单例设计模式分为懒汉式和饿汉式,懒汉式具有延迟加载的特性。 将构造函数声明为private,禁止外部创建对象,然后内部创建一个私有的本身对象,再创建一个静态公有的函数供外部获取内部的单个私有对象。 饿汉式: package Singleton_Pattern; //饿汉式单例 public class demo1 { public static void main(String[原创 2016-05-09 18:47:30 · 379 阅读 · 0 评论 -
工厂设计模式一 简单工厂模式
工厂设计模式实现了创建者和调用者的分离。 类别: 1.简单工厂模式; 2.工厂方法模式; 3.抽象工厂模式;遵循的设计原则: 1.OCP(开闭原则,Open-Closed Principle):一个软件的实体应当那个对扩展开放,对修改关闭; 2.DIP(依赖倒置原则,Dependence Inversion Principle):要针对接口编程,不要针对实现编程; 3.LoD(迪米特法原创 2016-07-28 09:23:36 · 273 阅读 · 0 评论 -
工厂模式二 工厂方法模式
工厂方法模式的要点: 1.为了避免简单工厂模式的缺点,不完全满足开闭原则; 2.工厂方法模式与简单工厂模式最大的不同在于,简单工厂模式只有一个(对于一个项目或一个模块而言)工厂类,而工厂方法模式有一组实现了相同接口的工厂类; 首先还是写一个Car的接口和两个实现类:public interface Car { void run(); }public class Audi impleme原创 2016-07-28 09:39:25 · 343 阅读 · 0 评论 -
工厂模式三 抽象工厂模式
抽象工厂模式可以用来生产不同产品族的全部产品。(对于新增加的产品,无能为力;但是支持增加产品族) 抽象工厂模式其实是工厂方法模式的升级版本,在有多个业务品种和分类时,通过抽象工厂模式产生需要的对象是一种非常好的解决方案。首先创建发动机引擎的接口与不同层次引擎的实现类:public interface Engine { void run(); void start(); }//高端引原创 2016-07-28 10:02:16 · 214 阅读 · 0 评论 -
建造者模式
建造者模式的本质: 1.分离了对象子组件的单独构造(由Builder来负责)和装配(由Director负责)。从而可以构造出复杂的对象。这个模式适用于:某个对象的构建过程复杂的情况下使用。 2.由于实现了构建和装配的解耦。不同的构建器,相同的装配,也可以做出不同的对象;相同的构建器,不同的装配顺序也可以做出不同的对象。也就是实现了构建算法与装配算法的解耦,实现了更好的复用。下面用建造飞船的例子来原创 2016-07-28 11:07:47 · 327 阅读 · 0 评论 -
原型模式深入--使用序列化机制实现对象的深克隆
其实对象的深克隆还可以通过序列化来实现,直接上代码,对象使用的还是之前的sheep对象,但是要实现Serializable的接口:public class Client3 { public static void main(String[] args) throws CloneNotSupportedException, Exception { Date date = new原创 2016-07-28 12:54:54 · 945 阅读 · 0 评论 -
原型模式(Prototype)
原型模式的要点: 1.如果通过new去产生一个对象需要非常繁琐的数据准备和访问权限,则可以使用原型模式; 2.其实原型模式就是java中的克隆技术,以某个对象为原型,复制出新的对象。显然,新的对象具备原型对象的特点。优势有:效率高(直接克隆,避免了重新执行构造过程的步骤)。 3.克隆类似于new,但是不同于new。new创建新的对象属性采用的是默认值。克隆出的对象属性完全和原型对象相同。并且克原创 2016-07-28 12:08:52 · 342 阅读 · 0 评论 -
适配器模式(Adapter模式)
适配器模式也是结构型模式的一种。 结构型模式的核心作用是从程序的结构上实现松耦合,从而可以扩大整体的类结构,用来解决更大的问题。 结构型模式的分类有: 1.适配器模式,代理模式,桥接模式; 2.装饰模式,组合模式,外观模式,享元模式;适配器模式可以将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以在一起工作。 适配器模式中的角色有原创 2016-07-28 15:48:24 · 520 阅读 · 0 评论 -
代理模式(Proxy)一 静态代理
代理模式的作用:通过代理,控制某个对象的访问,可以详细的控制访问某个(某类)对象的方法,在调用这个方法前做前置处理,调用这个方法后做后置处理,即AOP的微观实现。代理模式也是AOP编程的核心实现机制。 代理模式的核心角色: 1.抽象角色:定义代理角色和真实角色的公共对外方法; 2.真实角色:实现抽象角色,定义真实角色所要实现的业务逻辑,供代理角色调用。 3.代理角色:实现抽象角色,是真实角色原创 2016-07-28 16:35:48 · 418 阅读 · 0 评论 -
备忘录模式(memento)
备忘录模式的核心: 就是保存某个对象内部状态的拷贝,这样以后就可以将该对象恢复到原先的状态。 备忘录模式的结构: 1.源发器类Originator:负责创建一个备忘录Memento,用以记录当前时刻它的内部状态,并可以使用备忘录恢复内部状态; 2.备忘录类Memento:负责存储Originator对象的内部状态,并可以防止Originator以外的其他对象访问备忘录Memento; 3.原创 2016-07-29 21:51:01 · 342 阅读 · 0 评论