天天看點

設計模式--擴充卡模式代碼示範對象擴充卡與類擴充卡執行個體:從枚舉器到疊代器的适配

代碼示範

鴨子接口:

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();
    }

}           

複制