设计模式--适配器模式

Posted lm970585581

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了设计模式--适配器模式相关的知识,希望对你有一定的参考价值。

代码演示

鸭子接口:

package com.java.jikexueyuan.adaptermode.duck;

public interface Duck {
    public void quack();
    public void fly();
}

绿头鸭实现鸭子接口;

package com.java.jikexueyuan.adaptermode.duck;

public class GreenHeadDuck implements Duck {

    @Override
    public void quack() {
        // TODO Auto-generated method stub
        System.out.println(" Ga Ga");
    }

    @Override
    public void fly() {
        // TODO Auto-generated method stub
        System.out.println("I am flying a long distance");
    }

}

火鸡接口:

package com.java.jikexueyuan.adaptermode.turkey;

public interface Turkey {

    public void gobble();
    public void fly();

}

火鸡实现类:

package com.java.jikexueyuan.adaptermode.turkey;

public class WildTurkey implements Turkey {

    @Override
    public void gobble() {
        // TODO Auto-generated method stub
        System.out.println(" Go Go");
    }

    @Override
    public void fly() {
        // TODO Auto-generated method stub
        System.out.println("I am flying a short distance");
    }

}

适配器对外展示的是鸭子的形式,所以实现鸭子的接口

package com.java.jikexueyuan.adaptermode.adapter;

import com.java.jikexueyuan.adaptermode.duck.Duck;
import com.java.jikexueyuan.adaptermode.turkey.Turkey;

public class TurkeyAdapter implements Duck {
    private Turkey turkey;
    
    public TurkeyAdapter(Turkey turkey)
    {
        this.turkey=turkey;
    }

    @Override
    public void quack() {
        // TODO Auto-generated method stub
        turkey.gobble();
    }

    @Override
    public void fly() {
        // TODO Auto-generated method stub
        for(int i=0;i<6;i++)
        {
            turkey.fly();  //模拟鸭子飞的远
        }
    }

}

 

适配器模式:将一个类的接口转换成另一种接口.让原本接口不兼容的类可以兼容

技术分享图片

从用户的角度看不到被适配者,是解耦的

用户调用适配器转化出来的目标接口方法

适配器再调用被适配者的相关接口方法

用户收到反馈结果,感觉只是和目标接口交互

 

对象适配器与类适配器

类适配器:通过多重继承目标接口和被适配者类方式来实现适配

技术分享图片

多重继承,其中继承的目标接口部分达到适配目的,而继承被适配者类的部分达到通过调用被适配者类里的方法来实现目标接口的功能

对象适配器与类适配器差异

技术分享图片

对象适配器和类适配器使用了不同的方法实现适配,对象适配器使用组合,类适配器使用继承.

使用类适配器重新实现上边的例子:

适配器:

package com.java.jikexueyuan.adaptermode.adapter;

import com.java.jikexueyuan.adaptermode.duck.Duck;
import com.java.jikexueyuan.adaptermode.turkey.WildTurkey;

public class TurkeyAdapter2 extends WildTurkey implements Duck {

    @Override
    public void quack() {
        // TODO Auto-generated method stub
        super.gobble();
    }
    @Override
    public void fly() {
        // TODO Auto-generated method stub
        super.fly();
        super.fly();
        super.fly();
    }
}

 

实例:从枚举器到迭代器的适配

package com.java.jikexueyuan.adaptermode.adapter;

import java.util.Enumeration;
import java.util.Iterator;

public class EnumerationIterator implements Iterator<Object> {

    private Enumeration enumeration;
    
    public EnumerationIterator(Enumeration enumeration)
    {
         this.enumeration= enumeration;
    }
    
    @Override
    public boolean hasNext() {
        // TODO Auto-generated method stub
        return enumeration.hasMoreElements();
    }

    @Override
    public Object next() {
        // TODO Auto-generated method stub
        return enumeration.nextElement();
    }

    @Override
    public void remove() {
        // TODO Auto-generated method stub
        throw new UnsupportedOperationException();
    }

}

 

以上是关于设计模式--适配器模式的主要内容,如果未能解决你的问题,请参考以下文章

多选模式列表视图行在删除后保持选中状态

Java设计模式之适配器模式

设计模式之适配器模式

设计模式之适配器模式

php设计模式之适配器模式实例代码

.NET(C#) 设计模式 适配器模式