设计思路
- 定义抽象工厂接口:创建一个抽象工厂接口,它定义了创建不同平台组件的方法,如创建图形渲染器和输入管理器。
- 实现具体工厂类:针对每个平台(Windows、Linux、Android、iOS)创建具体的工厂类,这些类实现抽象工厂接口,负责创建对应平台的具体组件。
- 定义抽象产品接口:为图形渲染器和输入管理器分别定义抽象接口,作为不同平台具体组件的共性抽象。
- 实现具体产品类:针对每个平台,实现符合抽象产品接口的具体图形渲染器和输入管理器类。
关键代码片段
- 抽象工厂接口
public interface GameEngineComponentFactory {
GraphicsRenderer createGraphicsRenderer();
InputManager createInputManager();
}
- 抽象产品接口 - 图形渲染器
public interface GraphicsRenderer {
void render();
}
- 抽象产品接口 - 输入管理器
public interface InputManager {
void handleInput();
}
- 具体工厂类 - Windows平台
public class WindowsGameEngineComponentFactory implements GameEngineComponentFactory {
@Override
public GraphicsRenderer createGraphicsRenderer() {
return new WindowsGraphicsRenderer();
}
@Override
public InputManager createInputManager() {
return new WindowsInputManager();
}
}
- 具体产品类 - Windows图形渲染器
public class WindowsGraphicsRenderer implements GraphicsRenderer {
@Override
public void render() {
System.out.println("Windows Graphics Renderer is rendering.");
}
}
- 具体产品类 - Windows输入管理器
public class WindowsInputManager implements InputManager {
@Override
public void handleInput() {
System.out.println("Windows Input Manager is handling input.");
}
}
- 使用抽象工厂
public class GameEngine {
private GraphicsRenderer renderer;
private InputManager inputManager;
public GameEngine(GameEngineComponentFactory factory) {
this.renderer = factory.createGraphicsRenderer();
this.inputManager = factory.createInputManager();
}
public void start() {
renderer.render();
inputManager.handleInput();
}
}
- 测试代码
public class Main {
public static void main(String[] args) {
GameEngineComponentFactory factory = new WindowsGameEngineComponentFactory();
GameEngine gameEngine = new GameEngine(factory);
gameEngine.start();
}
}