工厂模式
2014-08-05 20:52
120 查看
我们在工厂对象上调用的是创建方法,而该工厂对象将生成接口的某个实现的对象。
通过这种方式,我们的代码将完全与接口的实现分离,就使得我们可以透明的将某个实现替换为另一个实现。
example 1:
output:
example 2:
output:
通过这种方式,我们的代码将完全与接口的实现分离,就使得我们可以透明的将某个实现替换为另一个实现。
example 1:
package source.gohome01; interface Service { void method1(); void method2(); } interface ServiceFactory { Service getService(); } class Implementation1 implements Service { Implementation1() {} public void method1() { System.out.println("Implementation1 method1"); } public void method2() { System.out.println("Implementation1 method2"); } } class Implementation2 implements Service { Implementation2() {} public void method1() { System.out.println("Implementation2 method1"); } public void method2() { System.out.println("Implementation2 method2"); } } class Implementation1Factory implements ServiceFactory { public Service getService() { return new Implementation1(); } } class Implementation2Factory implements 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(new Implementation1Factory()); serviceConsumer(new Implementation2Factory()); } }
output:
example 2:
package source.gohome01; interface Game { boolean move(); } interface GameFactory { Game getGame(); } class Checkers implements Game { private int moves = 0; private static final int MOVES = 3; public boolean move() { System.out.println("Checkers move " + moves); return ++moves != MOVES ; } } class CheckersFactory implements GameFactory { public Game getGame() { return new Checkers(); } } class Chess implements Game { private int moves = 0; private static final int MOVES = 4; public boolean move() { System.out.println("Chess move " + moves); return ++moves != MOVES ; } } class ChessFactory implements 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(new CheckersFactory()); playGame(new ChessFactory()); } }
output: