1、先创建抽象层的工厂和对象
/**
* 抽象工厂类
*/
public abstract class AbstractFactory {
public abstract EventAbstract createEvent();
public abstract ToolAbstract createTool();
}
/**
* 事件抽象类
*/
public abstract class EventAbstract {
public abstract void occurEvent();
}
/**
* 工具抽象类
*/
public abstract class ToolAbstract {
//使用工具
public abstract void useTool();
}
2、具体工厂和实现类
1、魔法世界
public class MagicFactory extends AbstractFactory {
public EventAbstract createEvent() {
return new MagicEvent();
}
public ToolAbstract createTool() {
return new MagicTool();
}
}
public class MagicEvent extends EventAbstract {
public void occurEvent() {
System.out.println("遇到一只哥布林");
}
}
public class MagicTool extends ToolAbstract {
public void useTool() {
System.out.println("魔法师使用法术球做为工具");
}
}
2、现代世界
public class ModernFactory extends AbstractFactory {
public EventAbstract createEvent() {
return new ModernEvent();
}
public ToolAbstract createTool() {
return new ModernTool();
}
}
public class ModernEvent extends EventAbstract {
public void occurEvent() {
System.out.println("遇到恐怖份子");
}
}
public class ModernTool extends ToolAbstract {
public void useTool() {
System.out.println("现代人使用机枪做为工具");
}
}
3、原始世界
public class OriginalFactory extends AbstractFactory {
public EventAbstract createEvent() {
return new OriginalEvent();
}
public ToolAbstract createTool() {
return new OriginalTool();
}
}
public class OriginalEvent extends EventAbstract {
public void occurEvent() {
System.out.println("遇到一只长毛象");
}
}
public class OriginalTool extends ToolAbstract {
public void useTool() {
System.out.println("原始人使用石矛做为工具");
}
}
执行案例代码
public static void main(String[] args) {
//用抽象工厂接收具体工厂并且调用实现方法
AbstractFactory maFactory = new MagicFactory();//魔法世界工厂
maFactory.createEvent().occurEvent();//事件触发
maFactory.createTool().useTool();//使用工具
AbstractFactory moFactory = new ModernFactory();//现代世界工厂
moFactory.createEvent().occurEvent();//事件触发
moFactory.createTool().useTool();//使用工具
AbstractFactory orFactory = new OriginalFactory();//原始世界工厂
orFactory.createEvent().occurEvent();//事件触发
orFactory.createTool().useTool();//使用工具
}
执行效果