Java设计模式代码详解
我是李香兰小朋友
会编程的足球狗
展开
-
适配器模式
Adaptee.java(被适配的类,相当于例子中的,PS/2键盘)public class Adaptee { public void request(){ System.out.println("可以完成客户请求的需要的功能!"); }}Adapter.java(适配器)public class Adapter extends Adaptee implemen原创 2017-08-16 09:49:42 · 207 阅读 · 0 评论 -
观察者模式(广播机制)
核心:主要用户1:N的通知。当一个对象(目标对象或observable【消息发布】)状态变化,他需要及时告知一系列对象(观察对象,observer【消息订阅】),令他们做出响应通知观察者的方式: 1:推:每次都会把通知以广播的方式发送给所有的观察者,所有观察者只能被动接收 2:拉:观察者只要知道有情况即可。至于什么时候获取内容,获取什么内原创 2017-08-18 08:50:28 · 1004 阅读 · 0 评论 -
状态模式
核心:用于解决系统中复杂对象的状态转换以及不同状态下行为的封装问题结构: context环境类:环境类中维护一个state对象,也是定义当前状态 state抽象状态类: concretestate具体状态类:每个类封装了一个状态对应的行为场景:银行系统中账号状态的管理;OA系统中公文状态的管理,酒店系统中房间状态的管理;线原创 2017-08-17 11:46:40 · 332 阅读 · 0 评论 -
模板方法模式
核心:处理代码步骤中定义好,具体实现延迟到子类中定义什么时候使用:实现一个算法时,整体步骤很固定,但是某些部分易变,但是易变的可以抽象出来,使子类实现场景:数据库访问封装;Junit单元测试;hibernate中的模板;spring jdbc templateBankTemplateMethod.javapublic abstract class BankTemplateMetho原创 2017-08-17 11:34:47 · 274 阅读 · 0 评论 -
策略模式
本质:分离算法,选择实现场景javase中GUI编程中,布局管理器;spring框架中,resoyrce接口,资源访问策略;javax.servlet.http.httpservlet#service()例子:比如商城打折,老用户新商品打9折,老用户老商品打8折,新用户新商品减10元,新用户老商品减20元Strategy.java(策略类)public interface Stra原创 2017-08-17 11:25:44 · 303 阅读 · 0 评论 -
解释器模式和访问者模式(使用较少)
解释器模式:介绍:当我们开发新的语言时,可以考虑使用解释器模式场景:EL表达式的处理;正则表达式解释器;SQL语法解释器;数学表达式解释器访问者模式:定义:表示一个作用于某个对象结构中的各元素的操作,它使得我们可以再不改变个元素的类前提下定义作用于这些元素的新操作场景:Xml文档解析器设计;编译器的设计;复杂集合对象的处理了解应用场景即可,当然深入学习更好,没有坏处原创 2017-08-17 10:58:16 · 274 阅读 · 0 评论 -
命令者模式(使用较少)
场景:Struct2中,action的整个调用过程;数据库事务机制底层实现;命令的撤销和恢复Receiver.java(真正命令的执行者)public class Receiver { public void action(){ System.out.println("Receiver.action()"); }}Command.javapublic interf原创 2017-08-17 10:48:05 · 336 阅读 · 0 评论 -
中介模式
场景:mvc模式(其中的c,控制器就是一个中介者对象,m,v都和他打交道);java.lang.reflect.Method#invoke()例子:比如一个公司有市场部,开发部,财务部,之间的沟通就是通过总经理(中介者)来相互调用Mediator.java(中介者接口)public interface Mediator { void register(String dname,D原创 2017-08-17 10:38:11 · 267 阅读 · 0 评论 -
迭代器模式
场景:提供一种可以遍历聚合对象的方式,又称为cursor模式 聚合对象:存储数据 迭代器:遍历数据MyIterator.java(自定义迭代器接口)public interface MyIterator { void first(); //将游标指向第一个元素 void next(); //将游标指向下一个元素 boolean hasNex原创 2017-08-17 10:05:51 · 199 阅读 · 0 评论 -
责任链模式
定义:将能够处理同一类请求的对象连成一条链,所提交的请求沿链传递,能处理的自己处理,不能处理的传递给下一个对象。场景:java中异常机制try{}catch{};js中时间的冒泡和捕获机制,java语言中事件采取观察者模式;servlet开发中,过滤器的链处理;struct2拦截器的调用也是典型的责任链模式例子:比如请假流程,就是一层一层的传递给下一个领导,就是链状结构。Leader(原创 2017-08-17 09:57:42 · 177 阅读 · 0 评论 -
享元模式
场景:如果有很多个完全相同或者相似的对象,我们可以通过享元模式,节省内存。核心:享元模式以共享方式高效的支持大量细粒度对象重用应用场景;任何池,String类例子:比如围棋中,有黑棋白棋,同种颜色的棋子,只有坐标不一样,其他都一样,这是就可以用享元模式Coordinate.java(外部状态)public class Coordinate { private int x,y;原创 2017-08-17 09:35:46 · 219 阅读 · 0 评论 -
外观模式
迪米特法则(最少知识原则):一个软件实体应当尽可能少的与实体发生作用。例子:比如公司注册,需要很多过程,自己去各个政府机构签文档,就很多麻烦,这是就需要一个对象,这个对象有注册公司的所有方法,我们就只需调用这个对象的注册方法便完成需求工商局public interface 工商局 { void checkName(); //核名}class 海淀区工商局 implement原创 2017-08-17 09:21:26 · 203 阅读 · 0 评论 -
装饰者模式
ICar.javapublic interface ICar { void move();}//ConcreteComponent 具体构件角色(真实对象)class Car implements ICar { @Override public void move() { System.out.println("陆地上跑!"); }}//Decorator装饰角色c原创 2017-08-16 10:49:15 · 265 阅读 · 0 评论 -
组合模式
使用组合模式的场景:把部分和整体的关系用树状结构来表示,从而是客户端可以使用统一的方式处理,部分对象和整体对象核心:抽象构件角色:定义好叶子和容器构件的共同点。叶子构件角色:无叶子节点。容器构件角色:有容器特征,可以包含子节点。以杀毒软件为例:AbstracFile.java(接口)//抽象构建public interface AbstractFile { vo原创 2017-08-16 10:39:51 · 223 阅读 · 0 评论 -
桥接模式
Brand.java(品牌接口类)public interface Brand { void sale();}class Lenovo implements Brand { @Override public void sale() { System.out.println("销售联想电脑"); } }class Dell implements Brand {原创 2017-08-16 10:26:49 · 312 阅读 · 0 评论 -
代理模式之动态代理
Star(接口)public interface Star { /** * 面谈 */ void confer(); /** * 签合同 */ void signContract(); /** * 订票 */ void bookTicket(); /** * 唱歌 */ void sing(); /** * 收钱 */ void co原创 2017-08-16 10:16:05 · 195 阅读 · 0 评论 -
代理模式之静态代理
代理模式: 应用场景:安全代理:屏蔽对真实角色的直接访问远程代理:通过代理类远程方法调用(RMI)延迟加载:先加载轻量级的代理对象,真正需要再加载真实对象分类:静态代理(静态定义代理类) 动态代理(动态生成代理类):JDK自带的动态代理,Javaassist字节码操作实现,CGLIB,ASM Star.java(接口类)public int原创 2017-08-16 10:05:10 · 217 阅读 · 0 评论 -
备忘录模式
结构:源发器类(coriginator) 备忘录类(memento) 负责人类(careTake)核心:就是保存某个对象内部状态的拷贝,这样以后就可以将该对象恢复到原先状态场景:棋类游戏的悔棋;普通软件中的撤销操作;数据库回滚操作;ps中的历史记录Emp.java(源发器类)public class Emp { private St原创 2017-08-18 08:50:49 · 305 阅读 · 0 评论