設計模式練習(3)——抽象工廠模式

抽象工廠模式

一、題目:

某軟件公司要推出一款新的手機遊戲軟件,該軟件支持IOS、Android和Windows Phone等多個智能手機操作系統平臺,針對不同的手機操作系統,該遊戲軟件提供了不同的遊戲操作控制類(OperationController)和遊戲界面控制類(InterfaceController),並提供的相應的工廠類來封裝這些類的初始化過程。該軟件要求具有較好的擴展性,以支持新的操作系統平臺,爲了滿足上述要求,試採用抽象工廠模式對其進行設計。
(1)繪製抽象工廠模式結構視圖
(2)給出實例類圖並實現代碼。

二、所用模式結構視圖:

抽象工廠模式

三、實例類圖:

抽象工廠模式

四、實例實現代碼:

(因爲區分,所以在類的前面加了Gj19)

抽象產品-遊戲界面控制類

package AbstractFactoryPattern;
/**
 * 抽象產品-遊戲界面控制類
 * @author gong
 *
 */
public interface Gj19IInterfaceController {
    public void Interface();
}   

具體產品-Android遊戲界面控制類

package AbstractFactoryPattern;
/**
 * 具體產品-Android遊戲界面控制類
 * @author gong
 *
 */
public class Gj19AndroidInterfaceController implements Gj19IInterfaceController {

    @Override
    public void Interface() {
        System.out.println("Android遊戲界面控制");
    }

}

具體產品-IOS遊戲界面控制類

package AbstractFactoryPattern;
/**
 * 具體產品-IOS遊戲界面控制類
 * @author gong
 *
 */
public class Gj19IOSInterfaceController implements Gj19IInterfaceController {

    @Override
    public void Interface() {
        System.out.println("IOS遊戲界面控制");
    }

}

具體產品-WindowsPhone遊戲界面控制類

package AbstractFactoryPattern;
/**
 * 具體產品-WindowsPhone遊戲界面控制類
 * @author gong
 *
 */
public class Gj19WindowsPhoneInterfaceController implements Gj19IInterfaceController {

    @Override
    public void Interface() {
        System.out.println("WindowsPhone遊戲界面控制");
    }

}

抽象產品-遊戲操作控制類

package AbstractFactoryPattern;
/**
 * 抽象產品-遊戲操作控制類
 * @author gong
 *
 */
public interface Gj19IOperationController {
    public void Operator();

}

具體產品-Andriod遊戲操作控制類

package AbstractFactoryPattern;
/**
 * 具體產品-Andriod遊戲操作控制類
 * @author gong
 *
 */
public class Gj19AndroidOperationController implements Gj19IOperationController {

    @Override
    public void Operator() {
        System.out.println("Andriod遊戲操作控制");
    }

}

具體產品-IOS遊戲操作控制類

package AbstractFactoryPattern;
/**
 * 具體產品-IOS遊戲操作控制類
 * @author gong
 *
 */
public class Gj19IOSOperationController implements Gj19IOperationController {

    @Override
    public void Operator() {
        System.out.println("IOS遊戲操作控制");
    }

}

具體產品-WindowsPhone遊戲操作控制類

package AbstractFactoryPattern;
/**
 * 具體產品-WindowsPhone遊戲操作控制類
 * @author gong
 *
 */
public class Gj19WindowsPhoneOperationController implements Gj19IOperationController {

    @Override
    public void Operator() {
        System.out.println("WindowsPhone遊戲操作控制");
    }

}

抽象工廠–遊戲控制類

package AbstractFactoryPattern;
/**
 * 抽象工廠--遊戲控制類
 * @author gong
 *
 */
public interface Gj19GameController {
    //遊戲操作控制
    public Gj19IOperationController OperationController();
    //遊戲界面控制
    public Gj19IInterfaceController InterfaceController();
}

具體工廠–Android遊戲控制類

package AbstractFactoryPattern;
/**
 * 具體工廠--Android遊戲控制類
 * @author gong
 *
 */
public class AndroidController implements Gj19GameController {

    //Android遊戲操作控制
    @Override
    public Gj19IOperationController OperationController() {
        return new Gj19AndroidOperationController();
    }

    //Android遊戲界面控制
    @Override
    public Gj19IInterfaceController InterfaceController() {
        return new Gj19AndroidInterfaceController();
    }

}

具體工廠–IOS遊戲控制類

package AbstractFactoryPattern;
/**
 * 具體工廠--IOS遊戲控制類
 * @author gong
 *
 */
public class IOSController implements Gj19GameController {

    //IOS遊戲操作控制
    @Override
    public Gj19IOperationController OperationController() {
        return new Gj19IOSOperationController();
    }

    //IOS遊戲界面控制
    @Override
    public Gj19IInterfaceController InterfaceController() {
        return new Gj19IOSInterfaceController();
    }

}

具體工廠– WindowsPhone遊戲控制類

package AbstractFactoryPattern;
/**
 * 具體工廠-- WindowsPhone遊戲控制類
 * @author gong
 *
 */
public class WindowsPhoneController implements Gj19GameController {

    // WindowsPhone遊戲操作控制
    @Override
    public Gj19IOperationController OperationController() {
        return new Gj19WindowsPhoneOperationController();
    }

    // WindowsPhone遊戲界面控制
    @Override
    public Gj19IInterfaceController InterfaceController() {
        return new Gj19WindowsPhoneInterfaceController();
    }

}

測試抽象工廠模式

package AbstractFactoryPattern;
/**
 * 測試抽象工廠模式
 * @author gong
 *
 */
public class TestAbstractFactoryPattern {
    public static void main(String[] args) {
        Gj19GameController  gj19GameController;  //抽象工廠--遊戲控制類
         Gj19IInterfaceController gj19IInterfaceController;  //遊戲界面控制類
         Gj19IOperationController gj19IOperationController;  //遊戲操作控制類

         gj19GameController = new AndroidController();  //具體工廠--Android遊戲控制類
         gj19IInterfaceController = gj19GameController.InterfaceController();
         gj19IOperationController = gj19GameController.OperationController();

         gj19IInterfaceController.Interface();

         gj19IOperationController.Operator();
    }

}

五、運行結果:

結果

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