Java基于享元模式实现五子棋游戏功能实例详解

  

本文实例讲述了Java基于享元模式实现五子棋游戏功能。分享给大家供大家参考,具体如下:

  

  

享元模式,以共享的方式高效地支持大量的细粒度对象。通过复用内存中已存在的对象,降低系统创建对象实例的性能消耗。享元的英文是轻量级,表示特别小的对象,即细粒度对象。

  

  

<强> 1。模式分析

  

我们借用五子棋游戏来说明这一模式。

  

癑ava基于享元模式实现五子棋游戏功能实例详解"

  

<强> 2。享元模式静态类图

  

癑ava基于享元模式实现五子棋游戏功能实例详解"

  

<强> 3。代码示例

  

3.1创建抽象棋子一AbstractChessman

        包com.demo.flyweight.object;   公共抽象类AbstractChessman {//棋子坐标   保护int x;   保护int y;//棋子类别(黑|白)   保护字符串象棋;   公共AbstractChessman(字符串象棋){   这一点。国际象棋=国际象棋;   }//点坐标设置   公共抽象空洞点(int x, int y);//显示棋子信息   公共空间展示(){   System.out.println(这一点。国际象棋+”(“+。x +”、“+。y + ") ");   }   }      之前      

3.2创建黑子一BlackChessman

        包com.demo.flyweight.object;   公开课BlackChessman延伸AbstractChessman {/* *   *构造方法初始化黑棋子   */公共BlackChessman () {   超级(“●”);   system . out。println (“——BlackChessman建设执行! ! !”);   }//点坐标设置   @Override   公共空间点(int x, int y) {   这一点。x=x;   这一点。y=y;//显示棋子内容   显示();   }   }      之前      

3.3创建白子一WhiteChessman

        包com.demo.flyweight.object;   公开课WhiteChessman延伸AbstractChessman {/* *   *构造方法初始化白棋子   */公共WhiteChessman () {   超级(“○”);   system . out。println (“——WhiteChessman建设执行! ! !”);   }//点坐标设置   @Override   公共空间点(int x, int y) {   这一点。x=x;   这一点。y=y;//显示棋子内容   显示();   }   }      之前      

3.4创建棋子工厂一FiveChessmanFactory

        包com.demo.flyweight.factory;   进口java.util.Hashtable;   进口com.demo.flyweight.object.AbstractChessman;   进口com.demo.flyweight.object.BlackChessman;   进口com.demo.flyweight.object.WhiteChessman;   公开课FiveChessmanFactory {//单例模式工厂   私有静态FiveChessmanFactory FiveChessmanFactory=new FiveChessmanFactory ();//缓存存放共享对象   AbstractChessman>私人最终Hashtable<角色;缓存=new Hashtable<性格,AbstractChessman> ();//私有化构造方法   私人FiveChessmanFactory () {   }//获得单例工厂   公共静态FiveChessmanFactory getInstance () {   返回fiveChessmanFactory;   }/* *   *根据字符获得棋子   *   * @param c   * (B:黑棋W:白棋)   * @return   */公共AbstractChessman getChessmanObject (char c) {//从缓存中获得棋子对象实例   AbstractChessman AbstractChessman=this.cache.get (c);   如果(abstractChessman==null) {//缓存中没有棋子对象实例信息则创建棋子对象实例并放入缓存   开关(c) {   例B:   abstractChessman=new BlackChessman ();   打破;   例“W”:   abstractChessman=new WhiteChessman ();   打破;   默认值:   打破;   }//为防止非法字符的进入返回零   如果(abstractChessman !=null) {//放入缓存   this.cache。把(c, abstractChessman);   }   }//如果缓存中存在棋子对象则直接返回   返回abstractChessman;   }   }      之前      

3.5客户端实现一客户

        包com.demo;   进口java.util.Random;   进口com.demo.flyweight.factory.FiveChessmanFactory;   进口com.demo.flyweight.object.AbstractChessman;/* *   *主应用程序   *   * @author   */公共类客户{/* *   * @param arg游戏   */公共静态void main (String [] args) {//创建五子棋工厂   FiveChessmanFactory FiveChessmanFactory=FiveChessmanFactory   .getInstance ();   随机随机=new随机();   int屏蔽罩=0;   AbstractChessman AbstractChessman=零;//随机获得棋子   for (int i=0;我& lt;10;我+ +){   屏蔽罩=random.nextInt (2);   开关(屏蔽罩){//获得黑棋   例0:   abstractChessman=fiveChessmanFactory.getChessmanObject (B);   打破;//获得白棋   案例1:   abstractChessman=fiveChessmanFactory.getChessmanObject (' W ');   打破;   }   如果(abstractChessman !=null) {   abstractChessman。点(我random.nextInt (15));   }   }   }   }      

Java基于享元模式实现五子棋游戏功能实例详解