每天学一点设计模式-适配器模式

适配器模式


英文名


Adapter Pattern


定义


将一个类的接口,转换成客户期望的另一个接口。适配器让原本接口不兼容的类可以合作无间


理解


1.该模式中有3个对象:目标对象,适配器,被适配者

2.目标对象:客户想要用的接口对象,我们想要将别的接口伪装成的对象

3.适配器:目标对象和被适配者的中间组件,该类中存放有被适配者,但是继承目标对象。对外,他是目标对象,自己内部却是调用了被适配者的方法来伪装成目标对象。

4.被适配者:客户想要将该对象变成目标对象,适配器通过恰当的调用该类中的方法从而达到伪装效果


代码


目标对象


public interface Duck {
	public void quack();

	public void fly();
}

目标对象的真正实现类


public class MallardDuck implements Duck {

	@Override
	public void quack() {
		System.out.println("Quack!");
	}

	@Override
	public void fly() {
		System.out.println("I'm flying");
	}

}

被适配者


public interface Turkey {
	public void gobble();

	public void fly();

}

被适配者的实现类


public class WildTurkey implements Turkey {

	@Override
	public void gobble() {
		System.out.println("Gobble gobble");

	}

	@Override
	public void fly() {
		// TODO Auto-generated method stub
		System.out.println("I'm flying a short distance");
	}

}

想要将Turkey对象转换成Turkey对象的适配器


public class TurkeyAdapter implements Duck {
	Turkey turkey;
	
	

	public TurkeyAdapter(Turkey turkey) {
		this.turkey = turkey;
	}


	@Override
	public void quack() {
		// TODO Auto-generated method stub
		turkey.gobble();
	}

	@Override
	public void fly() {
		// TODO Auto-generated method stub
		for(int i=0;i<5;i++){
			turkey.fly();
		}
	}

}

测试程序


public class DuckTestDrive {

	public static void main(String[] args) {
		MallardDuck duck = new MallardDuck();
		Turkey turkey = new WildTurkey();
		Duck turkeyAdapter = new TurkeyAdapter(turkey);

		System.out.println("The turkey says ...");
		turkey.gobble();
		turkey.fly();
		System.out.println("The duck says ...");
		duck.quack();
		duck.fly();
		System.out.println("The turkeyAdapter says ...");
		turkeyAdapter.quack();
		turkeyAdapter.fly();

	}

}

输出


The turkey says ...
Gobble gobble
I'm flying a short distance
The duck says ...
Quack!
I'm flying
The turkeyAdapter says ...
Gobble gobble
I'm flying a short distance
I'm flying a short distance
I'm flying a short distance
I'm flying a short distance
I'm flying a short distance


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