void play();
}
interface GameFactory {
Game getGame();
}
class Chess implements Game {
public void play() {
}
}
class ChessFactory implements GameFactory {
public Game getGame() {
return new Chess();
}
}
class Checkers implements Game {
public void play() {
}
}
class CheckersFactory implements GameFactory {
public Game getGame() {
return new Checkers();
}
}
public class Games {
public static void play(GameFactory factory) {
Game newGame = factory.getGame();
newGame.play();
}
public static void main(String[] args) {
play(new ChessFactory());
play(new CheckersFactory());
}
}
匿名内部类实现
-----------------------------
a:一个类只需要一个工厂,所以用static
interface Service {
void method1();
void method2();
}
interface ServiceFactory {
Service getService();
}
class Implement1 implements Service {
private Implement1() {
}
private static ServiceFactory factory = new ServiceFactory() {
public Service getService() {
return new Implement1();
}
};
public static ServiceFactory getFactory() {
return factory;
}
public void method1() {
System.out.println("Imple1 method1");
}
public void method2() {
System.out.println("Imple1 method2");
}
}
class Implement2 implements Service {
private Implement2() {
}
public static ServiceFactory factory = new ServiceFactory() {
public Service getService() {
return new Implement2();
}
};
public static ServiceFactory getFactory() {
return factory;
}
public void method1() {
System.out.println("Imple2 method1");
}
public void method2() {
System.out.println("Imple2 method2");
}
}
public class Factories {
public static void ServiceConsume(ServiceFactory factory) {
Service service = factory.getService();
service.method1();
service.method2();
}
public static void main(String[] args) {
Factories.ServiceConsume(Implement1.getFactory());
Factories.ServiceConsume(Implement2.getFactory());
}
}