java——适配器模式

适配器模式(Adapter),将一个类的接口转换成客户希望的另外一个接口。适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。

设计原则:
1、面向接口编程(面向抽象编程)
2、封装变化
3、多用组合,少用继承
4、对修改关闭,对扩展开放

示例:(没有适配器)

class Demo{
	public static void main(String[] args) {
		
		PowerA powerA = new PowerAImpl();
		work(powerA);
		
		PowerB powerB = new PowerBImpl(); 
		work(powerB);//这条语句编译过不了,因为 work(PowerA)对于参数(PowerB)不适用,两类不兼容
	}
	
	public static void work(PowerA a) {
		System.out.println("正在连接...");
		a.insert();
		System.out.println("工作结束.");
	}
}

interface PowerA{
	public void insert();
}
class PowerAImpl implements PowerA{
	public void insert() {
		System.out.println("电源A开始工作");
	}
}

interface PowerB{
	public void connet();
}

class PowerBImpl implements PowerB{
	public void connet() {
		System.out.println("电源B开始工作");
	}
}

用了适配器之后:

class Demo{
	public static void main(String[] args) {
		
		PowerA powerA = new PowerAImpl();
		//work(powerA);
		
		PowerB powerB = new PowerBImpl(); 
		//work(powerB);
		Adapter adapter = new Adapter(powerB);
		work(adapter);//A和 B能兼容
	}

	public static void work(PowerA a) {
		System.out.println("正在连接...");
		a.insert();
		System.out.println("工作结束.");
	}
}

//适配器
class Adapter implements PowerA{
	private PowerB powerB;
	public Adapter(PowerB powerB) {
		this.powerB = powerB;
	}
	public void insert() {
		powerB.connet();
	}
}

interface PowerA{
	public void insert();
}
class PowerAImpl implements PowerA{
	public void insert() {
		System.out.println("电源A开始工作");
	}
}

interface PowerB{
	public void connet();
}

class PowerBImpl implements PowerB{
	public void connet() {
		System.out.println("电源B开始工作");
	}
}

输出结果:

正在连接...
电源B开始工作
工作结束.

另一种适配器:

//没有用适配器之前,Dog类要实现Animal接口中的所有方法,与想要的不符
interface Animal{
	public void sing();
	public void cry();
	public void run();
	public void swim();
}

class Dog implements Animal{
	public void sing() {}
	public void cry() {}
	public void run() {
		System.out.println("我是疯狗,疯狂的跑");
	}
	public void swim() {}
}
//适配器
abstract class AnimalFunction{
	public void sing() {}
	public void cry() {}
	public void run() {}
	public void swim() {}
}

class Dog extends AnimalFunction{
	public void run() {
		System.out.println("我是疯狗,疯狂的跑");
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值