工厂模式

来源:互联网 发布:三维插值算法 编辑:程序博客网 时间:2024/06/05 00:07

我们在工厂对象上调用的是创建方法,而该工厂对象将生成接口的某个实现的对象。

通过这种方式,我们的代码将完全与接口的实现分离,就使得我们可以透明的将某个实现替换为另一个实现。

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:

0 0