接口與工廠

Thinking in Java
第四版練習18 創建一個Cycle接口,及其Unicycle、Bicycle、Tricycle實現。對每種類型的Cycle都創建工廠,然後編寫代碼使用這些工廠。

package interfaces;

interface Cycle{
    int wheels();
}
interface CycleFactory{
    Cycle getCycle();
}

class Unicycle implements Cycle{
    public int wheels(){
        return 1;
    }
}

class UnicycleFactory implements CycleFactory{
    public Cycle getCycle(){
        return new  Unicycle();
    }
}

class Tricycle implements Cycle{
    public int wheels(){
        return 3;
    }
}

class TricycleFactory implements CycleFactory{
    public Cycle getCycle(){
        return new  Tricycle();
    }
}

class Bicycle implements Cycle{
    public int wheels(){
        return 2;
    }
}
class BicycleFactory implements CycleFactory{
    public Cycle getCycle(){
        return new  Bicycle();
    }
}

public class E18_CycleFactory {
    public static void CycleWheels(CycleFactory factory){
        Cycle cycle=factory.getCycle();
        System.out.println(cycle.wheels());
    }
    public static void main(String[] args){
        CycleWheels(new TricycleFactory());
        CycleWheels(new BicycleFactory());
        CycleWheels(new UnicycleFactory()); 
    }
}

練習19,使用工廠方法創建一個框架,可以執行拋硬幣和擲骰子的功能。

package interfaces;

interface Tossing{
    boolean result();
}

interface TossingFactory{
    Tossing getTossing();
}

class CoinTossing implements Tossing{
    private int events;
    private static final int EVENTS=2;
    public boolean result(){
        System.out.println(events);
        return  ++events!=EVENTS;
    }
}
class CoinTossingFactory implements TossingFactory{
    public Tossing getTossing(){
        return new CoinTossing();
    }
}

class DiceTossing implements Tossing{
    private int events;
    private static final int EVENTS=6;
    public boolean result(){
        System.out.println(events);
        return ++events!=EVENTS;
    }
}
class DiceTossingFactory implements TossingFactory{
    public Tossing getTossing(){
        return new DiceTossing();
    }
}
public class E19_TossingFactory {
    public static void simulate(TossingFactory factory){
        Tossing t=factory.getTossing();
        while(t.result()){
            ;
        }
    }
    public static void main(String[] args){
        simulate(new CoinTossingFactory());
        simulate(new DiceTossingFactory());

    }

}

接口是實現多重繼承的途徑,而生成遵循某個接口的對象的典型方式是工廠方法設計模式。

通過工廠方式,代碼將完全與接口的實現分離,這樣就可以透明的將某個實現替換爲另一種實現。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章