Java设计模式菜鸟系列(八)适配器模式建模与实现

转载请注明出处:http://blog.csdn.net/lhy_ycu/article/details/39805069

适配器模式(Adapter):将某个类的接口转换成客户端期望的另一个接口表示,目的是消除由于接口不匹配所造成的类的兼容性问题。

主要分为三类:类的适配器模式、对象的适配器模式、接口的适配器模式。

一、类的适配器模式

1、uml建模:

2、代码实现

/**
 * 示例(一):类的适配器模式
 *
 * 原类拥有一个待适配的方法originMethod
 */
class Original {
	public void originMethod() {
		System.out.println("this is a original method...");
	}
}

interface Targetable {
	/**
	 * 与原类的方法相同
	 */
	public void originMethod();

	/**
	 * 目标类的方法
	 */
	public void targetMethod();
}

/**
 * 该Adapter类的目的:将Original类适配到Targetable接口上
 */
class Adapter extends Original implements Targetable {
	/**
	 * 可以看到该类只需要实现targetMethod即可。
	 *
	 * 因为Targetable接口里的originMethod方法已经由Original实现了。
	 *
	 * 这就是Adapter适配器这个类的好处:方法实现的转移(或称嫁接) --> 将Adapter的责任转移到Original身上
	 *
	 * 这样就实现了类适配器模式 --> 将Original类适配到Targetable接口上
	 *
	 * 如果Original又添加了一个新的方法originMethod2,那么只需在Targetable接口中声明即可。
	 */
	@Override
	public void targetMethod() {
		System.out.println("this is a target method...");
	}

}

/**
 * 客户端测试类
 *
 * @author Leo
 */
public class Test {
	public static void main(String[] args) {
		Targetable target = new Adapter();
		target.originMethod();
		target.targetMethod();
	}
}

二、对象的适配器模式

1、uml建模:

2、代码实现:

/**
 * 示例(二):对象的适配器模式
 *
 * 原类拥有一个待适配的方法originMethod
 */
class Original {
	public void originMethod() {
		System.out.println("this is a original method...");
	}
}

interface Targetable {
	/**
	 * 与原类的方法相同
	 */
	public void originMethod();

	/**
	 * 目标类的方法
	 */
	public void targetMethod();
}

/**
 * 持有Original类的实例
 */
class Adapter implements Targetable {
	private Original original;

	public Adapter(Original original) {
		this.original = original;
	}

	@Override
	public void targetMethod() {
		System.out.println("this is a target method...");
	}

	@Override
	public void originMethod() {
		original.originMethod();
	}

}

/**
 * 客户端测试类
 *
 * @author Leo
 */
public class Test {
	public static void main(String[] args) {
		Original original = new Original();
		Targetable target = new Adapter(original);
		target.originMethod();
		target.targetMethod();
	}
}

三、接口的适配器模式

1、uml建模:

2、代码实现

/**
 * 示例(三):接口的适配器模式
 *
 * 这次咱们直接将原类做成一个接口 --> 原始接口
 */
interface Originable {
	public void originMethod1();

	public void originMethod2();
}

/**
 * 该抽象类实现了原始接口,实现了所有的方法。
 *
 * 空实现即可,具体实现靠子类,子类只需实现自身需要的方法即可。
 *
 * 以后咱们就不用跟原始的接口打交道,只和该抽象类取得联系即可。
 */
abstract class Adapter implements Originable {
	public void originMethod1() {

	}

	public void originMethod2() {

	}
}

/**
 * 子类只需选择你所需要的方法进行实现即可
 */
class OriginSub1 extends Adapter {
	@Override
	public void originMethod1() {
		System.out.println("this is Originable interface's first sub1...");
	}

	/**
	 * 此时:originMethod2方法默认空实现
	 */
}

class OriginSub2 extends Adapter {
	/**
	 * 此时:originMethod1方法默认空实现
	 */

	@Override
	public void originMethod2() {
		System.out.println("this is Originable interface's second sub2...");
	}
}

/**
 * 客户端测试类
 *
 * @author Leo
 */
public class Test {
	public static void main(String[] args) {
		Originable origin1 = new OriginSub1();
		Originable origin2 = new OriginSub2();
		origin1.originMethod1();
		origin1.originMethod2();
		origin2.originMethod1();
		origin2.originMethod2();
	}
}

四、总结

1、类的适配器模式:当希望将一个类转换成满足另一个新接口的类时,可以使用类的适配器模式,创建一个新类,继承原有的类,实现新的接口即可。

2、对象的适配器模式:当希望将一个对象转换成满足另一个新接口的对象时,可以创建一个Adapter类,持有原类的一个实例,在Adapter类的方法中,调用实例的方法就行。

3、接口的适配器模式:当不希望实现一个接口中所有的方法时,可以创建一个抽象类Adapter实现所有方法,我们写别的类的时候,继承抽象类即可。

时间: 2024-11-08 21:29:34

Java设计模式菜鸟系列(八)适配器模式建模与实现的相关文章

Java设计模式菜鸟系列(六)单例模式建模与实现

转载请注明出处:http://blog.csdn.net/lhy_ycu/article/details/39784403 单例模式(Singleton):是一种常用的设计模式.在Java应用中,单例对象能保证在一个JVM中,该对象只有一个实例存在.好处主要有:1.某些类创建比较频繁,对于一些大型的对象,这是一笔很大的系统开销.2.省去了new操作符,降低了系统内存的使用频率,减轻GC压力. 单例模式主要有两种实现方式:1.懒汉式:2.饿汉式 一.uml建模 二.代码实现: 1.懒汉式 /**

Java设计模式菜鸟系列(二)观察者模式建模与实现

转载请注明出处:http://blog.csdn.net/lhy_ycu/article/details/39755577 观察者(Observer)模式定义:在对象之间定义了一对多的依赖关系,这样一来,当一个对象改变状态时,依赖它的对象都会收到通知并自动跟新.Java已经提供了对观察者Observer模式的默认实现, Java对观察者模式的支持主要体现在Observable类和Observer接口.先看uml模型图: 一.UML模型图 二.代码实现 /** 示例:咱们去菜市场买菜 * * 小商

Java设计模式菜鸟系列总结及博客全目录

转载请注明出处:http://blog.csdn.net/lhy_ycu/article/details/40031567 今天来对这23种设计模式做个总结.咱使用设计模式的目的是为了可重用代码.让代码更容易被他人理解.保证代码可靠性,当然设计模式并不是万能的,项目中的实际问题还有具体分析.咱不能为了使用设计模式而使用,而是在分析问题的过程中,想到使用某种设计模式能达到咱需要的效果,而且比不使用设计模式更有优势,那么咱该考虑使用设计模式了. 一.设计模式的一般分类 创建型(Creator)模式(

Java设计模式菜鸟系列(一)策略模式建模与实现

转载请注明出处:http://blog.csdn.net/lhy_ycu/article/details/39721563 今天开始咱们来谈谈Java设计模式.这里会结合uml图形来讲解,有对uml建模不熟的可以参考我的另一篇博文uml建模. 首先,个人觉得模式的设计就是一个将变化的东西和不变(稳定)的东西分离的过程.咱们的应用中可能有很多需要改变的地方,而模式要做的就是把它们"抽取"出来并进行"封装"和"实现",因此更多的时候咱们是面向接口编程

Java设计模式菜鸟系列(十八)责任链模式建模与实现

转载请注明出处:http://blog.csdn.net/lhy_ycu/article/details/40018231 责任链模式(ChainOfResponsibility): 有多个对象,每个对象持有下一个对象的引用,形成一条链,请求在这条链上传递,直到某一对象决定处理该请求,但是发出者并不清楚最终哪个对象会处理该请求. 一.uml建模: 二.代码实现 /** * 责任链模式:有多个对象,每个对象持有下一个对象的引用,形成一条链, * * 请求在这条链上传递,直到某一对象决定处理该请求,

Java设计模式菜鸟系列(十九)备忘录模式建模与实现

转载请注明出处:http://blog.csdn.net/lhy_ycu/article/details/40018967 备忘录模式(Memento): 主要目的是保存一个对象的某个状态,以便在适当的时候恢复对象. 一.uml建模: 二.代码实现 /** * 备忘录模式(Memento):主要目的是保存一个对象的某个状态,以便在适当的时候恢复对象 * * 示例:原始类--> 创建.恢复备忘录 */ class Original { private String state; public Or

Java设计模式菜鸟系列(三)装饰者模式建模与实现

转载请注明出处:http://blog.csdn.net/lhy_ycu/article/details/39759199 装饰者(Decorator)模式:动态地将责任附加到对象上,若要扩展功能,装饰者提供了比继承更具有弹性的替代方案.对于装饰者模式,它其实是一种包装,所以我更愿意称它为一种包装.像咱们以前经常使用的Java里面的IO流就用到了装饰者模式.比如:BufferedReader br = new BufferedReader(new InputStreamReader(new Fi

Java设计模式菜鸟系列(二十一)享元模式建模与实现

转载请注明出处:http://blog.csdn.net/lhy_ycu/article/details/40021651 享元模式(Flyweight):运用共享的技术有效地支持大量细粒度的对象.主要目的是实现对象的共享,即共享池,当系统中对象多的时候可以减少内存的开销.在某种程度上,你可以把单例看成是享元的一种特例. 一.uml建模: 二.代码实现 /** * 享元模式(Flyweight):运用共享的技术有效地支持大量细粒度的对象. * * 主要目的是实现对象的共享,即共享池,当系统中对象

Java设计模式菜鸟系列(十五)建造者模式建模与实现

转载请注明出处:http://blog.csdn.net/lhy_ycu/article/details/39856435 建造者模式(Builder):工厂类模式提供的是创建单个类的模式,而建造者模式则是将各种产品集中起来进行管理.简单起见,就拿之前的工厂方法模式进行修改一下就可以得到建造者模式. 一.uml建模: 二.代码实现 /** * 示例:建造者模式 * * 与工厂模式的区别:工厂类模式提供的是创建单个类,而建造者模式则是将各种产品集中起来进行管理 */ interface Sende