工厂与匿名内部类
?
?
// 匿名内部类 & 工厂方法interface Service{void method1();void method2();}interface ServiceFactory{Service getService();}class Implementation1 implements Service{private Implementation1(){}public void method1(){System.out.println("Implementation1 methdo1");}public void method2(){System.out.println("Implementation1 methdo2");}public static ServiceFactory factory = new ServiceFactory(){public Service getService() {return new Implementation1();}};}class Implementation2 implements Service{private Implementation2(){};public void method1() {System.out.println("Implementation2 methdo1");}public void method2() {System.out.println("Implementation2 methdo2");}public static ServiceFactory factory = new ServiceFactory(){public Service getService(){return new Implementation2();}};}public class Factories {public static void serviceConsumer(ServiceFactory fact){Service s =fact.getService();s.method1();s.method2();}public static void main(String[] args){serviceConsumer(Implementation1.factory);serviceConsumer(Implementation2.factory);}}?
这样类似,一个工厂来应付一种服务。 具体例子:
?
?
package InnerClass;interface Game{boolean move();}interface GameFactory{Game getGame();}class Checkers implements Game{private Checkers(){}private int moves = 0;private static final int MOVES = 3;public boolean move(){System.out.println("Checkers move "+moves);return ++moves != MOVES;}public static GameFactory factory = new GameFactory(){public Game getGame(){return new Checkers();}};}class Chess implements Game{private Chess(){}private int moves = 0;private static final int MOVES = 4;public boolean move(){System.out.println("Chess move "+moves);return ++moves != MOVES;}public static GameFactory factory = new GameFactory(){public Game getGame(){return new Chess();}};}public class Games {public static void playGame(GameFactory factory){Game s = factory.getGame();while(s.move()){}}public static void main(String[] args){playGame(Checkers.factory);playGame(Chess.factory);}}?
?
?
PS:摘自Thinking in Java