設計模式練習(3)——抽象工廠模式
阿新 • • 發佈:2019-02-12
抽象工廠模式
一、題目:
某軟體公司要推出一款新的手機遊戲軟體,該軟體支援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();
}
}
五、執行結果: