Java之接口与工厂详解二(附源码)

Posted mufeng_慕枫

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java之接口与工厂详解二(附源码)相关的知识,希望对你有一定的参考价值。

前言


       如果不是用工厂方法,你的代码就必须在某处指定将要创建的 Service的确切类型,以便调用合适的构造器。        为什么我们想要添加这种额外级别的间接性呢?一个常见的原因是想要创建框架:假设你正在创建一个对弈游戏系统,例如,在相同的棋盘上下国际象棋和西洋跳棋:

示例代码


package com.mufeng.theninthchapter;

interface Game 
	boolean move();


interface GameFactory 
	Game getGame();


class Checkers implements Game 
	private int moves = 0;
	private static final int MOVES = 3;

	@Override
	public boolean move() 
		// TODO Auto-generated method stub
		System.out.println("Checkers move " + moves);
		return ++moves != MOVES;
	



class CheckersFactory implements GameFactory 

	@Override
	public Game getGame() 
		// TODO Auto-generated method stub
		return new Checkers();
	



class Chess implements Game 
	private int moves = 0;
	private static final int MOVES = 4;

	@Override
	public boolean move() 
		// TODO Auto-generated method stub
		System.out.println("Chess move " + moves);
		return ++moves != MOVES;
	



class ChessFactory implements GameFactory 

	@Override
	public Game getGame() 
		// TODO Auto-generated method stub
		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());
	



输出结果


Checkers move 0
Checkers move 1
Checkers move 2
Chess move 0
Chess move 1
Chess move 2
Chess move 3

       如果 Games()类表示一段复杂的代码,那么这种方式就允许你在不同类型的游戏中复用这段代码。你可以再想象一些能够从这个模式中受益的更加精巧的游戏。





以上是关于Java之接口与工厂详解二(附源码)的主要内容,如果未能解决你的问题,请参考以下文章

Java之内部类与向上转型详解(附源码)

Java设计模式之五大创建型模式(附实例和详解)

Java之局部内部类和匿名内部类的区别详解(附源码)

Java 代码实例 14BeanUtils用法详解,附源码分析

Java并发编程- FutureTask详解与池化思想的设计和实战二

Java并发编程- FutureTask详解与池化思想的设计和实战二