java设计模式之适配器模式
定义
将一个接口转换成客户希望的另一个接口,使接口不兼容的那些类可以一起工作,其别名为包装器(Wrapper)。适配器模式既可以作为类结构型模式,也可以作为对象结构型模式。
在适配器模式中,我们通过增加一个新的适配器类来解决接口不兼容的问题,使得原本没有任何关系的类可以协同工作。
根据适配器类与适配者类的关系不同,适配器模式可分为对象适配器和类适配器两种,在对象适配器模式中,适配器与适配者之间是关联关系;在类适配器模式中,适配器与适配者之间是继承(或实现)关系。
类型
结构型
分类
具体又可以划分为类适配器、对象适配器。
角色
目标抽象类:Target,该角色把其他类转换为我们期望的接口,可以是一个抽象类或接口,也可以是具体类。
被适配者: Adaptee ,原有的接口,也是希望被适配的接口。
适配器: Adapter, 将被适配者和目标抽象类组合到一起的类。
[实验任务一]:双向适配器
实现一个双向适配器,使得猫可以学狗叫,狗可以学猫抓老鼠。
Adapter.java public class Adapter implements Cat,Dog{ private Cat cat=new ConcreteCat(); private Dog dog=new ConcreteDog(); public void Cat(Cat _cat){ cat=_cat; } public void Dog(Dog _dog){ dog=_dog; } public void CatchMouse(){} public void Wang(){} public void Action(){ System.out.println("小狗学小猫:"); cat.CatchMouse(); } public void Cry(){ System.out.println("小猫学小狗:"); dog.Wang(); } } Cat.java public interface Cat { public void Cry(); public void CatchMouse(); } Dog.java public interface Dog { public void Wang(); public void Action(); } ConcreteCat.java public class ConcreteCat implements Cat{ public void Cry(){ System.out.println("喵喵叫!"); } public void CatchMouse(){ System.out.println("抓老鼠!"); } } ConcreteDog.java public class ConcreteDog implements Dog{ public void Wang(){ System.out.println("汪汪叫!"); } public void Action(){ System.out.println("快快跑!"); } } main.java public class main { public static void main(String[] args) { Dog dog=new Adapter(); Cat cat=new Adapter(); dog.Action(); cat.Cry(); } }