美文网首页
适配器模式

适配器模式

作者: 九灬日 | 来源:发表于2020-01-20 16:10 被阅读0次

    有点嫁接的感觉,对外展示的是一个类或接口,内部可能是其他类或接口,对外无感知。

     类适配器:继承实现,静态定义

     对象适配器:代理实现,动态组合模式

        接口适配器:选择性重写接口方法,不必全部重写

    一、对象适配器

    鸟类接口

    public interface Bird {

    public void fly();

    public void say();

    }

    鸟类实现类

    public class Duck implements Bird {

    @Override

    public void fly() {

    System.out.println("i'm Duck! i can fly!");

    }

    @Override

    public void say() {

    System.out.println("ga ga ga");

    }

    }

    动物接口

    public interface Animal {

    public void name();

    public void canDo();

    }

    动物实现类

    public class Monkey implements Animal {

    @Override

    public void name() {

    System.out.println("i'm monkey!");

    }

    @Override

    public void canDo() {

    System.out.println("i can say ji ji zha zha !");

    }

    }

    适配器

    public class BirdAdapter implements Bird {

    private Animal ani;

    BirdAdapter(Animal a){

    this.ani = a;

    }

    @Override

    public void fly() {

    ani.name();

    }

    @Override

    public void say() {

    ani.canDo();

    }

    }

    二、类适配器

    public class BirdAdapter2 extends Monkey implements Bird {

    @Override

    public void fly() {

    name();

    }

    @Override

    public void say() {

    canDo();

    }

    }

    测试类

    public class AdapterTest {

    public void test(Bird b){

    b.fly();

    b.say();

    }

    /**

    * 对象适配器

    */

    @Test

    public void test1() {

    AdapterTest t = new AdapterTest();

    Animal a = new Monkey();

    BirdAdapter ad = new BirdAdapter(a);

    t.test(ad);

    System.out.println("神不神奇,奇不奇怪");

    }

    /**

    * 类适配器

    */

    @Test

    public void test2(){

    Bird b = new BirdAdapter2();

    b.fly();

    b.say();

    }

    }

    三、接口适配器

    鸟类接口

    public interface Bird {

    public void name();

    public void fly();

    public void say();

    }

    适配器

    public abstract class BirdAdapter implements Bird {

    @Override

    public void name() {

    }

    @Override

    public void fly() {

    }

    @Override

    public void say() {

    }

    }

    鸭子

    public class Duck extends BirdAdapter {

    public void fly() {

    super.fly();

    }

    public void say() {

    super.say();

    }

    }

    相关文章

      网友评论

          本文标题:适配器模式

          本文链接:https://www.haomeiwen.com/subject/auhjzctx.html