【设计模式】【披着羊皮的狼——适配器模式起源的传说】

来源:互联网 发布:科讯cms漏洞 编辑:程序博客网 时间:2024/04/30 08:04

        适配器最早的发明者不是人,而是狼。这得从一个古老的家族斗争故事讲起。传说中在广袤的内蒙古大草原上生活着一群狼和和羊。羊吃草,狼吃羊,每天都发生着这样的血案。终于有一天,羊说:我受够了,我再也不要忍受这种担惊受怕的日子了,我要离开这里,我要到一个没有狼的地方去。于是羊群都迁徙,上了梁山,做起了山羊。上梁山的路只有一条,有重“羊”把守,狼抓羊变得越来越困难。

        因为抓不到羊,灰太狼老是受红太狼老婆的冷落,完全没了一家之主的地位,在经历了无数次失败之后,灰太狼终于想出了一个办法:假扮羊混入梁山。为了使自己看起来更像一只羊,灰太狼拿出了一个祖传的法宝:狼适配器——一张羊皮。为了使这次行动更加顺利,灰太狼分析了狼和羊的特征,并且用程序进行了模拟:

package com.crayon.adapter.wolfandsheep;

/**

 * 狼的接口

 * @author jingping.yi

 *

 */

public interface IWolf {

    // 狼的外貌

    public void wolfLooks();

   

    // 吃肉

    public void eatMeat();

}

 

package com.crayon.adapter.wolfandsheep;

 

/**

 * 羊的接口。

 * @author jingping.yi

 *

 */

public interface ISheep {

    // 羊的外貌

    public void sheepLooks();

    // 吃草

    public void eatGrass();

}

package com.crayon.adapter.wolfandsheep;

 

public class ARealWolf implements IWolf {

 

    @Override

    public void wolfLooks() {

       System.out.println("I am a real wolf, I have a wolfLooks.");

    }

 

    @Override

    public void eatMeat() {

       System.out.println("I am a real wolf, I eat meat.");

       System.out.println("老婆,我抓到羊了");

    }

 

}

package com.crayon.adapter.wolfandsheep;

 

public class ARealSheep implements ISheep {

 

    @Override

    public void sheepLooks() {

       System.out.println("I am a real sheep, I have a sheepLooks.");

    }

 

    @Override

    public void eatGrass() {

       System.out.println("I am a real sheep, I eat grass.");

    }

 

}

package com.crayon.adapter.wolfandsheep;

/**

 * 一个狼适配器。这样他就是一直披着羊皮的狼了。

 * @author jingping.yi

 *

 */

public class AWolfAdapter implements ISheep {

    // 被适配的对象,即本质是一匹狼

    IWolf wolf = null;

    /**

     * 构造函数。将一匹狼来包装成一头羊。

     */

    public AWolfAdapter(IWolf wolf){

       this.wolf = wolf;

    }

   

    @Override

    public void sheepLooks() {

       // 假装自己是一头羊

       System.out.println("I am a sheep,too.");

       // 隐藏自己的外貌

       // wolf.wolfLooks();

    }

 

    @Override

    public void eatGrass() {

       // 本质是吃肉

       wolf.eatMeat();

    }

 

}

package com.crayon.adapter.wolfandsheep;

 

/**

 * 适配器模式——披着羊皮的狼

 * @author jingping.yi

 *

 */

public class Main {

    public static void main(String[] args) {

       // 一头真羊

       ISheep sheepA = new ARealSheep();

       sheepA.sheepLooks();

       sheepA.eatGrass();

      

       // 一头披着羊皮的狼

       ISheep fakeSheep = new AWolfAdapter(new ARealWolf());

       fakeSheep.sheepLooks();

       fakeSheep.eatGrass();

    }

}

// 输出

I am a real sheep, I have a sheepLooks.

I am a real sheep, I eat grass.

I am a sheep,too.

I am a real wolf, I eat meat.

老婆,我抓到羊了

 

        通过这次充分的准备,灰太狼终于如愿以偿的抓到了羊,红太狼对他也变得更温柔体贴了,不久之后还诞下了爱的结晶——可爱的小灰灰,从此一家三口过着幸福美满的生活。

原创粉丝点击