其他分享
首页 > 其他分享> > 适配器模式和迪迦奥特曼不得不说的故事

适配器模式和迪迦奥特曼不得不说的故事

作者:互联网

在这里插入图片描述

1、类适配器模式

早上刚来,看到弟弟在喝水,我突然感觉不太好了,说道:今天天气有点阴沉,估计又要下雨了,到处湿漉漉的,就连刚学的设计模式也感觉是注水了!

弟弟撇了我一眼,道:此话怎讲?

我说:你可知晓类适配器模式?想来你是知道的,就是通过类之间的关系构建的适配器;
它是由三部分组成:现有资源,适配的方法接口,目标资源。现有资源以目标资源作为父类,通过实现接口的方法,调用父类的属性或者方法。从而实现现有资源做出目标资源的操作。给你看个图图!

看图说话:从关系上来看,大古继承了迪迦,大古拥有了变身器,大古打不动怪兽,迪迦可以打怪兽看。大古想要打怪兽,需要通过实现打开变身器,才能调用迪迦的各种能力,实现打怪兽。
在这里插入图片描述

/**
 * 迪迦奥特曼
 *
 * @author czy
 * @date 2021/6/18
 */
public class UltramanTiga {

    public  void action(){
        System.out.println("迪迦使用宇宙射线击打宇宙小金刚");
        System.out.println("迪迦对怪兽造成了100点伤害");
    }
}

/**
 * 大古
 * 大古想要变身迪迦,需要一个变身器
 *
 * @author czy
 * @date 2021/6/18
 */
public class BigGu extends UltramanTiga implements ShapeShifter{

    @Override
    public void becomeBigPerson() {
        this.action();
    }
}

/**
 * 变身器
 *
 * @author czy
 * @date 2021/6/18
 */
public interface ShapeShifter {
    /**
     * 变成巨人
     */
    void becomeBigPerson();
}

/**
 * 快来看奥特曼变身打怪兽
 *
 * @author czy
 * @date 2021/6/18
 */
public class Test {
    public static void main(String[] args) {
            //我有一个大古,我想打怪兽
            BigGu bigGu = new BigGu();
            //我想要个迪迦
            bigGu.becomeBigPerson();

    }
}

弟弟:继承耦合有点高啊!在实际生产中应该不适用吧。

我:没错继承父类实现适配耦合性高

我:没错,明明继承父类,调用父类方法就行了,这种模式还要通过实现接口,通过实现接口方法中调用父类接口,感觉多此一举,完全是在水经验,故此,我说它是在灌水!

2、对象适配模式

弟弟:那有没有好的解决方法呢?

我:将继承改成组合就行了,每个人身体中都有迪迦,需要通过希望之光激发他。这就是对象适配模式。卡卡兔!!!
在这里插入图片描述

/**
 * 迪迦奥特曼终极版
 *
 * @author czy
 * @date 2021/6/18
 */
public class UltramanTiga {

    public  void action(){
        System.out.println("迪迦使用宇宙射线击打宇宙小金刚");
        System.out.println("迪迦对怪兽造成了100点伤害");
    }
}

/**
 * 每个人
 *  每个人的信念心中都有迪迦,通过希望之光操作迪迦打怪兽
 * @author czy
 * @date 2021/6/21
 */
public class EveryBody implements Light{
    private UltramanTiga ultramanTiga;

    public EveryBody(UltramanTiga ultramanTiga) {
        this.ultramanTiga = ultramanTiga;
    }

    @Override
    public void becomeBigPerson() {
        ultramanTiga.action();
    }
}

/**
 * 希望之光
 *
 * 适配接口
 *
 * @author czy
 * @date 2021/6/21
 */
public interface Light {
    /**
     * 变成巨人
     */
    void becomeBigPerson();
}

/**
 * 每个人都是迪迦
 *
 * @author czy
 * @date 2021/6/21
 */
public class Test {
    public static void main(String[] args) {
        EveryBody body = new EveryBody(new UltramanTiga());
        body.becomeBigPerson();
    }
}

你看看多个接口在这增加代码量!是不是水!
在这里插入图片描述

弟弟:确实水!明明能直接不用接口实现的!

我心中窃笑,表面稳如老狗:这就是面向接口编程啊骚年!七大原则忘了吗?依赖倒置原则啊,面向接口而非面向实现,所以是我在灌水哦!

在这里插入图片描述

标签:czy,author,适配器,奥特曼,public,2021,迪迦,void
来源: https://blog.csdn.net/qq_33684240/article/details/118083995