Java语言设计模式之抽象工厂(Abstract factories)模式
来源:互联网 发布:dns中顶级域名有哪些 编辑:程序博客网 时间:2024/06/07 08:22
抽象工厂(Abstract factories)
基本思想是:在创建工厂对象的地方,由你来决定如何使用该工厂对象创建的那些对象。
假设你要创建一个通用的游戏环境,而且你还想要支持不同类型的游戏。下面的例子用抽象工厂给出了它的一种可能的实现。
Games.java
package com.enfo.wd.factory;interface Obstacle{ void action();}interface Player{ void interactWith(Obstacle o);}class Kitty implements Player{ @Override public void interactWith(Obstacle o) { System.out.println("Kitty has encountered a"); o.action(); }}class KungFuGuy implements Player{ @Override public void interactWith(Obstacle o) { System.out.println("KungFuGuy now battles a"); o.action(); }}class Puzzle implements Obstacle{ @Override public void action() { System.out.println("Puzzle"); }}class NastyWeapon implements Obstacle{ @Override public void action() { System.out.println("NastyWeapon"); }}interface GameElementFactory{ Player makePlayer(); Obstacle makeObstacle();}class KittiesAndPuzzles implements GameElementFactory{ @Override public Player makePlayer() { return new Kitty(); } @Override public Obstacle makeObstacle() { return new Puzzle(); }}class KillAndDismember implements GameElementFactory{ @Override public Player makePlayer() { return new KungFuGuy(); } @Override public Obstacle makeObstacle() { return new NastyWeapon(); }}class GameEnvironment{ @SuppressWarnings("unused") private GameElementFactory gef; private Player p; private Obstacle ob; public GameEnvironment(GameElementFactory factory){ gef=factory; p=factory.makePlayer(); ob=factory.makeObstacle(); } public void play(){p.interactWith(ob);}}public class Games { GameElementFactory kp=new KittiesAndPuzzles(),kd=new KillAndDismember(); GameEnvironment g1=new GameEnvironment(kp) , g2=new GameEnvironment(kd); public void test1(){g1.play();} public void test2(){g2.play();} public static void main(String[] agrs){ Games games=new Games(); games.test1(); games.test2(); }}
在上面的游戏环境里,Player 对象与 Obstale 对象交互,根据你所选择的游戏类型,player 和 obstacle 的各自类型也会不同。你通过选择某个特定的GameElementFactory 来决定游戏的类型,然后 GameElementFactory 会控制初始化和游戏的进行。在上面的例子里,初始化和游戏的进行都非常简单,但那些活动(初始条件和状态变化)可以在很大程度上决定游戏的结局。这里,GameEnvironment 不是用来给其它类继承的 ,尽管那么做很可能也说的通。
阅读全文
0 0
- Java语言设计模式之抽象工厂(Abstract factories)模式
- Java设计模式之抽象工厂(Abstract Factory)模式
- JAVA设计模式之抽象工厂(Abstract Factory)模式
- 【java设计模式】之 抽象工厂(Abstract Factory)模式
- 【java设计模式】之 抽象工厂(Abstract Factory)模式
- 【java设计模式】之 抽象工厂(Abstract Factory)模式
- 抽象工厂(Abstract factories)
- Java:设计模式之抽象工厂模式(Abstract Factory)
- JAVA设计模式之 抽象工厂模式【Abstract Factory Pattern】
- Java开发之设计模式--抽象工厂模式(Abstract Factory)
- JAVA设计模式之 抽象工厂模式【Abstract Factory Pattern】
- 设计模式(四)factory,Polymorphic factories,Abstract factories
- .Net设计模式之抽象工厂模式(Abstract Factory)
- 设计模式(二)之Abstract Factory - 抽象工厂模式
- .NET设计模式之抽象工厂模式(Abstract Factory)
- 代码设计模式之抽象工厂模式(Abstract Factory)
- 设计模式之二 抽象工厂模式(Abstract Factory)
- 设计模式之抽象工厂模式(Abstract Factory)
- java包装类
- Java入门基础之习题集
- Socket详解
- 欢迎使用CSDN-markdown编辑器
- 实体类为什么要实现序列化
- Java语言设计模式之抽象工厂(Abstract factories)模式
- Linux的socket编程详解
- Python面试题
- Python 导入gensim后WARNING: g++ not available
- mongodb,redis,hbase 定位与区别
- linux系统fdisk报错error 22: Invalid argument解决办法
- APP字体大小那些事
- 字节流与字符流的区别详解
- Eclipse如何下载安装汉化版