java设计模式(结构型)之适配器模式
2014-03-17 13:07
405 查看
第0章:简介
适配器模式定义:适配器模式的定义:将一个类的接口转换成客户希望的另外一个接口。适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。适配器模式本质:转换匹配,复用功能
参考:研磨设计模式(书籍),大话设计模式(书籍)
模式图:
待补充
第1章:实践
第0节:单向适配器模式
(1)旧功能接口(OldIntf.java)package com.mcc.core.designPattern.structure.adapter.singleAdapter; /** * 旧功能接口 * * @author <a href="mailto:417877417@qq.com">menergy</a> * DateTime: 14-3-11 下午10:52 */ public interface OldIntf { public void oldMethod(); } |
package com.mcc.core.designPattern.structure.adapter.singleAdapter; /** * 旧功能 * * @author <a href="mailto:417877417@qq.com">menergy</a> * DateTime: 14-3-11 下午10:53 */ public class OldIntfImpl implements OldIntf { @Override public void oldMethod() { System.out.println("旧功能方法"); } } |
package com.mcc.core.designPattern.structure.adapter.singleAdapter; /** * 新功能接口 * * @author <a href="mailto:417877417@qq.com">menergy</a> * DateTime: 14-3-11 下午11:02 */ public interface NewIntf { public void newMethod(); } |
package com.mcc.core.designPattern.structure.adapter.singleAdapter; /** * 新功能 * * @author <a href="mailto:417877417@qq.com">menergy</a> * DateTime: 14-3-12 上午12:38 */ public class NewIntfImpl implements NewIntf { @Override public void newMethod() { System.out.println("新功能方法"); } } |
package com.mcc.core.designPattern.structure.adapter.singleAdapter; /** * 适配器 * * 适配器模式的定义:将一个类的接口转换成客户希望的另外一个接口。适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。 * 适配器模式的本质:转换匹配,复用功能 * * * @author <a href="mailto:417877417@qq.com">menergy</a> * DateTime: 14-3-11 下午11:07 */ public class Adapter implements NewIntf { //持有被适配的接口对象,即旧接口对象 private OldIntf oldIntf; /** * 构造器,传入被适配的对象 * @param oldIntf */ public Adapter(OldIntf oldIntf){ this.oldIntf = oldIntf; } /** * 适配旧功能方法 */ @Override public void newMethod() { oldIntf.oldMethod(); } } |
package com.mcc.core.designPattern.structure.adapter.singleAdapter; /** * 客户端测试 * * @author <a href="mailto:417877417@qq.com">menergy</a> * DateTime: 14-3-11 下午11:21 */ public class Client { public void test(NewIntf newIntf){ newIntf.newMethod(); } public static void main(String args[]){ Client client = new Client(); //调用新功能方法 client.test(new NewIntfImpl()); //适配方式调用旧功能方法 client.test(new Adapter(new OldIntfImpl())); } } |
第1节:双向适配器模式
(1)旧功能接口(OldIntf.java)package com.mcc.core.designPattern.structure.adapter.singleAdapter; /** * 旧功能接口 * * @author <a href="mailto:417877417@qq.com">menergy</a> * DateTime: 14-3-11 下午10:52 */ public interface OldIntf { public void oldMethod(); } |
package com.mcc.core.designPattern.structure.adapter.singleAdapter; /** * 旧功能 * * @author <a href="mailto:417877417@qq.com">menergy</a> * DateTime: 14-3-11 下午10:53 */ public class OldIntfImpl implements OldIntf { @Override public void oldMethod() { System.out.println("旧功能方法"); } } |
package com.mcc.core.designPattern.structure.adapter.singleAdapter; /** * 新功能接口 * * @author <a href="mailto:417877417@qq.com">menergy</a> * DateTime: 14-3-11 下午11:02 */ public interface NewIntf { public void newMethod(); } |
package com.mcc.core.designPattern.structure.adapter.singleAdapter; /** * 新功能 * * @author <a href="mailto:417877417@qq.com">menergy</a> * DateTime: 14-3-12 上午12:38 */ public class NewIntfImpl implements NewIntf { @Override public void newMethod() { System.out.println("新功能方法"); } } |
package com.mcc.core.designPattern.structure.adapter.doubleAdapter; /** * 适配器,双向 * * @author <a href="mailto:417877417@qq.com">menergy</a> * DateTime: 14-3-12 上午12:13 */ public class Adapter implements NewIntf,OldIntf { //持有新功能接口 private NewIntf newIntf; //持有旧功能接口 private OldIntf oldIntf; /** * 构造器,传入需要被适配的对象,这里包括新旧功能对象 * @param newIntf * @param oldIntf */ public Adapter(NewIntf newIntf,OldIntf oldIntf){ this.newIntf = newIntf; this.oldIntf = oldIntf; } /** * 新功能方法实现,实现旧功能方法调用,可加入其他业务逻辑 */ @Override public void newMethod() { oldIntf.oldMethod(); } /** * 旧功能方法实现,实现新功能方法调用,可加入其他业务逻辑 */ @Override public void oldMethod() { newIntf.newMethod(); } } |
package com.mcc.core.designPattern.structure.adapter.doubleAdapter; /** * 旧客户端测试 * * @author <a href="mailto:417877417@qq.com">menergy</a> * DateTime: 14-3-12 上午12:20 */ public class OldClient { /** * 调用旧接口中的方法,不受变动影响 * @param oldIntf */ public void test(OldIntf oldIntf){ oldIntf.oldMethod(); } public static void main(String args[]){ OldClient oldClient = new OldClient(); //调用旧功能方法 oldClient.test(new OldIntfImpl()); //适配方式调用新功能方法 oldClient.test(new Adapter(new NewIntfImpl(),new OldIntfImpl())); } } |
package com.mcc.core.designPattern.structure.adapter.doubleAdapter; /** * 新客户端测试 * * @author <a href="mailto:417877417@qq.com">menergy</a> * DateTime: 14-3-12 上午12:30 */ public class NewClient { /** * 调用新接口中的方法,不受变动影响 * @param newIntf */ public void test(NewIntf newIntf){ newIntf.newMethod(); } public static void main(String args[]){ NewClient newClient = new NewClient(); //调用新功能方法 newClient.test(new NewIntfImpl()); //适配方式调用旧功能方法 newClient.test(new Adapter(new NewIntfImpl(),new OldIntfImpl())); } } |
相关文章推荐
- java 设计模式——结构型模式(1.适配器模式)
- java设计模式——结构型模式专题(二)适配器模式
- Java设计模式(7)——结构型模式之适配器模式(Adapter)
- Java设计模式——结构型模式——适配器模式
- java设计模式——结构型之适配器模式
- Java设计模式之适配器模式Adapter(结构型)
- Java设计模式_结构型_适配器模式_丑小鸭与白天鹅
- Java设计模式之结构型模式-适配器模式(Adapter)
- Java结构型设计模式——适配器模式、代理模式
- JAVA设计模式(6) —<结构型>适配器模式(Adapter)
- Java常用的设计模式06:常用设计模式之适配器模式(结构型模式)
- java-设计模式(结构型)-【适配器模式】
- Java经典23种设计模式之结构型模式(三)------附代理模式、适配器模式、外观模式区别
- Java设计模式_(结构型)_适配器模式
- Java结构型设计模式中的适配器模式与桥接模式解析
- Java经典设计模式-结构型模式-适配器模式(Adapter)
- 一起学java设计模式--适配器模式(结构型模式)
- java设计模式--结构型模式--适配器模式
- Java设计模式(6)结构型:适配器模式
- java结构型设计模式——适配器模式