本文实例讲述了Java基于享元模式实现五子棋游戏功能。分享给大家供大家参考,具体如下:
享元模式,以共享的方式高效地支持大量的细粒度对象。通过复用内存中已存在的对象,降低系统创建对象实例的性能消耗。享元的英文是轻量级,表示特别小的对象,即细粒度对象。
<强> 1。模式分析强>
我们借用五子棋游戏来说明这一模式。
<强> 2。享元模式静态类图强>
<强> 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基于享元模式实现五子棋游戏功能实例详解