import java.util.HashMap;
import java.util.Map;interface IPlayer {
public void run();
}class Player1 implements IPlayer {
public void run() {
System.out.println("AAA run()");
}
}class Player2 implements IPlayer {
public void run() {
System.out.println("BBB run()");
}
}class AiFactory {
private final static Map<Integer, IPlayer> ais = new HashMap<Integer, IPlayer>(2); public static IPlayer getInstance(int level) {
IPlayer ai = ais.get(level);
if (null == ai) {
switch (level) {
case 1:
ais.put(level, new Player1());
break;
case 2:
ais.put(level, new Player2());
break;
}
}
return ais.get(level);
}
}public class factory {
private static final IPlayer player11 = AiFactory.getInstance(1);
private static final IPlayer player22 = AiFactory.getInstance(2);
private static final IPlayer player33 = AiFactory.getInstance(1);
private static final IPlayer player44 = AiFactory.getInstance(1);
public static void main(String args[]) {
Player1 player1 = new Player1();
Player2 player2 = new Player2();
player1.run();
player2.run();
player11.run();
player22.run();
player33.run();
player44.run();
}
}
import java.util.Map;interface IPlayer {
public void run();
}class Player1 implements IPlayer {
public void run() {
System.out.println("AAA run()");
}
}class Player2 implements IPlayer {
public void run() {
System.out.println("BBB run()");
}
}class AiFactory {
private final static Map<Integer, IPlayer> ais = new HashMap<Integer, IPlayer>(2); public static IPlayer getInstance(int level) {
IPlayer ai = ais.get(level);
if (null == ai) {
switch (level) {
case 1:
ais.put(level, new Player1());
break;
case 2:
ais.put(level, new Player2());
break;
}
}
return ais.get(level);
}
}public class factory {
private static final IPlayer player11 = AiFactory.getInstance(1);
private static final IPlayer player22 = AiFactory.getInstance(2);
private static final IPlayer player33 = AiFactory.getInstance(1);
private static final IPlayer player44 = AiFactory.getInstance(1);
public static void main(String args[]) {
Player1 player1 = new Player1();
Player2 player2 = new Player2();
player1.run();
player2.run();
player11.run();
player22.run();
player33.run();
player44.run();
}
}
如果我是这么写的Map map = Factory.getMap();那么我只需改getMap中的实现即可,仅此一处,不会遗漏当然这个例子有点牵强,但意思基本表达到了
个人体会,工程里能不new 尽量不让new 。 因为随便new出去的对象,对于框架来说基本是不可控的。你不无法知道具体编码人员最后都怎么处理的。
// 这是多出来的方法,
// 你可以在这里干任何事件
// 把神马强奸了都可以
// 就是这作用
}
(1)工厂方法有名称;
(2)工厂方法不必每次调用对象的时候都去创造一个新的对象;
(3)工厂方法可以返回原返回类型的任何子类型对象
(4)工厂方法在创建参数化类型的实例的时候,他们使得代码更简洁;