java设计模式之适配器模式

发布时间 2023-11-06 09:58:19作者: 哈哈哈老先生

定义
将一个接口转换成客户希望的另一个接口,使接口不兼容的那些类可以一起工作,其别名为包装器(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();
    } 
}