抽象工廠模式
一、題目:
某軟件公司要推出一款新的手機遊戲軟件,該軟件支持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();
}
}
五、運行結果: