大话设计模式笔记之适配器模式

一.适配器模式定义

    把一个类的接口转换成客户端期待的另一种接口,从而使原接口不匹配而无法再一起工作的两个类能在一起工作。

二.适配器模式中的角色

    目标、客户、被适配者、适配器是适配器模式中的四个角色。

    目标(CTarget):定义客户端使用的特定接口;

    客户(CClient):使用目标接口,与目标接口一致的对象合作;

    被适配者(CAdaptee):一个现存需要匹配的接口;

    适配器(Adapter):负责将CAdaptee接口转换成CTarget接口。

三.适配器模式实现方式

    适配器模式的实现方式可以分为两种类适配器和对象适配器。

    类适配器是通过继承类适配者类(CAdaptee)实现的,另外类适配器类还需要实现客户类所需的接口。当客户对象(CClient)调用适配器类(Adapter)的方法时,适配器内部调用它所继承的适配者的方法。

    对象适配器包含一个适配者的引用(reference),与类适配器类相同,对象适配类也实现了客户类所需的接口。当客户类对象调用适配器对象的方法时,适配器对象调用的是它包含的适配者实例的方法。

四.适配器代码演示

  下面通过几段代码来加深对适配器模式的理解。

适配者(CAdaptee)

package cn.lzz.design.adapterM;
 
public class Adaptee {
	public void specialRequest(){
		System.out.println("Called specialRequest() in Adaptee");
	}
}

目标(CTarget)

package cn.lzz.design.adapterM;

public interface Target {
	public void request();
}

对象适配器(Adapter)

package cn.lzz.design.adapterM;

public class AdapterI implements Target{
	private static Adaptee adaptee;
	static{
		adaptee=new Adaptee();
	}
	@Override
	public void request() {
		// TODO Auto-generated method stub
		adaptee.specialRequest();
	}

}

类适配器(CTarget)

package cn.lzz.design.adapterM;

public class AdapterC extends Adaptee implements Target{

	@Override
	public void request() {
		// TODO Auto-generated method stub
		this.specialRequest();
	}

}

客户(CClient)

package cn.lzz.design.adapterM;

public class Client {
	public static void main(String[] args) {
		Target target=new AdapterI();
		target.request();
	}
}

    通过上文的代码我可以看下,适配器模式的核心是适配器,适配器不仅需要实现目标(CTarget)的接口,还需通过继承或者组合的方式获取适配者,在目标类的实现方法中完成适配工作。适配器让两个不匹配的接口可以匹配使用。

    这是本人的第一篇博客,感觉开始的时间还是有点晚了。但又感觉只要开始了就不晚。设计模式给我打开了一扇窗,让自己在写代码的时候,可以试着用面向对象的特性封装、继承、多态设计和编写代码,让代码变的更简洁、扩展性和复用性更好,减少代码量少加点班。记得有个老员工和我说过,很少有知识点可以学一遍就能学好,一般都需要在实践中不停的去用去实践,才能正在的学会学懂。

你可能感兴趣的:(设计模式-java,设计模式)