因为练习题18和练习题19差不多,所以这里我决定实现练习题19。
练习题19:使用工厂方法来创建一个框架,它可以执行抛硬币和掷骰子功能。
实现如下:
游戏抽象接口及实现类如下:
public interface Game {
void play();
}
public class TossACoin implements Game {
private Random random = new Random();
TossACoin() {
}
@Override
public void play() {
int val = random.nextInt(2);
switch (val) {
case 0:
System.out.println("花");
break;
case 1:
System.out.println("字");
break;
}
}
}
public class Dice implements Game {
private Random random = new Random();
Dice() {
}
@Override
public void play() {
int val = random.nextInt(6) + 1;
switch (val) {
case 1:
System.out.println("⚀");
break;
case 2:
System.out.println("⚁");
break;
case 3:
System.out.println("⚂");
break;
case 4:
System.out.println("⚃");
break;
case 5:
System.out.println("⚄");
break;
case 6:
System.out.println("⚅");
break;
}
}
}
游戏抽象工厂及具体工厂实现类如下:
public interface GameFactory {
Game getGame();
}
public class TossACoinFactory implements GameFactory {
@Override
public Game getGame() {
return new TossACoin();
}
}
public class DiceFactory implements GameFactory {
@Override
public Game getGame() {
return new Dice();
}
}
运行代码如下:
public static void play(GameFactory factory) {
for (int i = 0; i < 2; i++) {
factory.getGame().play();
}
}
public static void main(String[] args) {
play(new TossACoinFactory());
play(new DiceFactory());
}
运行结果如下:
字
花
⚄
⚃
另外,用下图来总结一下工厂方法模式: