土地住大威德之适配器模式--adpter

今天我们的主人公是泰兴小县城大威德养的一条 射天设地的泰迪狗 -- 泰日天 ,真的是什么样的人养什么样的狗,下半身的大威德 养的狗都不一般

 一天泰日天刚吃完翔,突然看到主人大威德的丰盛早餐,垂涎欲滴,忽然觉得刚刚吃的津津有味的翔不香了,但是狗怎么能吃主人的食物呢,

所以 适配器模式上线了

既然是设配器那就有3要素

1。 目标(Target)接口:定义客户所需接口,当前系统业务所期待的接口。(大威德的早饭)

2。 适配者(Adaptee)类:需要被适配的角色,它是已经存在的类或对象。(泰日天吃翔)

3。 适配器(Adapter)类:它是一个转换器,通过继承或引用适配者的对象,把适配者接口转换成目标接口,它的职责就是要把适配者转换成目标角色 ,它通过继承Target并关联一个Adaptee对象使二者产生联系 (吃完翔的泰迪要吃主人的食物)

/**
 * 源角色 --- adapee
 * 狗吃狗粮,吃的翔
 */
public interface DogEat {
     void eatShit();
}

class DogEatImpl implements DogEat{

    @Override
    public void eatShit() {
        System.out.println("泰日天吃--翔、翔、翔");
    }
}
/**
 * 目标角色 --- target
 * 大威德吃的食物
 * */
public interface PeopleEat {
    void eatFood();
}

class PeopleEatImpl implements PeopleEat{

    @Override
    public void eatFood() {
        System.out.println("吃大威德吃的烧饼,油条");
    }
}
/**
 * 适配器角色 ---  Adaper
 * 定义适配器类,把狗变成大威德
 */
public class DogAdapterPeople  implements DogEat{
   private PeopleEat peopleEat;

    public DogAdapterPeople(PeopleEat peopleEat) {
        this.peopleEat = peopleEat;
    }

    public void eatShit() {
        System.out.println("使用转换器 把狗 变成大威德");
        // 调用大威德吃食的方法
        peopleEat.eatFood();
    }
}
public class TaidiDog {
    public void eatShit(DogEat dogEat){
        if(dogEat == null){
            throw new NullPointerException("请先传入泰迪狗");
        }
        dogEat.eatShit();
    }
}

测试类:

public class Client {
    public static void main(String[] args) {
        /** 泰迪狗天天吃翔吃狗粮吃腻了,想跟大威德一起吃饭 */
        TaidiDog taidiDog = new TaidiDog();
        DogEat dawed = new DogEatImpl();
        taidiDog.eatShit(dawed);
        System.out.println("------------");

        PeopleEat david = new PeopleEatImpl();
        DogAdapterPeople adapter = new DogAdapterPeople(david);
        taidiDog.eatShit(adapter);


    }
}

运行结果:

泰日天吃--翔、翔、翔
------------
使用转换器 把狗 变成大威德
吃大威德吃的烧饼,油条

优点:可以让任何两个没有关联的类一起运行,通过引入一个适配器类来重用现有的适配者类,无须修改原有结构

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值