1. 程式人生 > >設計模式練習(3)——抽象工廠模式

設計模式練習(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();
    }

}

五、執行結果:

結果