设计模式笔记1——适配器Adapter模式

1.根据意图对模式分类

设计模式笔记1——适配器Adapter模式_第1张图片 

2.接口型模式介绍 

2.1. 抽象类与接口的区别

一个类能实现多个接口,但只能继承一个抽象类

抽象类可以包含具体方法,但是接口只能都是抽象方法

抽象类可以声明和使用字段,接口不能,但可以创建静态的final常量

抽象类可以定义构造函数,但是接口不能

抽象类中的抽象方法的访问类型可以是public ,protected和默认类型,但接口中的抽象方法只能是public类型的,并且默认即为public abstract类型。

......

3. 适配器模式

适配以模式的意图在于:使用不同的接口的类所提供的服务为客户端提供它期望的服务。适配器模式将一个类的接口转换成客户期望的另一个接口。使得原本由于接口不兼容而不能一起工作的类可以在一起工作。

设计模式笔记1——适配器Adapter模式_第2张图片

3.1例子

/**
	客户端,一个电脑需要用三芯插座充电
*/
public class Computer {
	//三芯插座
	private ThreePlugIf  plug;	
	public Computer(ThreePlugIf plug){
		this.plug = plug;
	}
	//充电,需要用到的是三芯插座。
	public void charge(){
		plug.powerWithThree();
	}	
	public static void main(String[] args) {
		//只有两芯插座
		GBTwoPlug two =  new GBTwoPlug();
		ThreePlugIf three = new TwoPlugAdapter(two);
		Computer c = new Computer(three);
		c.charge();
				
		three = new TwoPlugAdapterExtends();
		c = new Computer(three);
		c.charge();
	}
}

/*
 * 三芯插座:目标接口
 */
public interface ThreePlugIf {
	public void powerWithThree();
}


public class GBTwoPlug {
	
	//两芯插座:被适配器类
	public void powerWithTwo(){
		System.out.println("用两芯插座供电");
	}
}

采用组合方式的适配器成为对象适配器

特点:把被适配者作为一个对象组合到适配器类中,以修改目标接口包装被适配者。

/*
 * 适配器,两芯插座;
 */
public class TwoPlugAdapter implements ThreePlugIf {

	private GBTwoPlug plug;
	
	public TwoPlugAdapter(GBTwoPlug plug){
		this.plug = plug;
	}
	@Override
	public void powerWithThree() {
		System.out.println("转换成三芯插座");
		plug.powerWithTwo();

	}
}

采用继承方式的适配器成为类适配器

特点:通过多重继承不兼容接口,实现对目标接口的匹配,单一的为某个类实现适配

/*
 * 继承
 */
public class TwoPlugAdapterExtends extends GBTwoPlug implements ThreePlugIf {

	@Override
	public void powerWithThree() {
		System.out.print("继承转化");
		this.powerWithTwo();

	}

}


你可能感兴趣的:(Java)