结构型-享元模式-02-实例实现(围棋)
结构型-享元模式-02-实例实现
- 1. 棋子抽象类(享元抽象类):
- 2. 白棋子(具体享元类):
- 3. 黑棋子(具体享元类):
- 4. 棋子坐标类(外部状态)
- 5. 享元工厂类
- 6. 客户端测试
- 7. 测试结果:
用围棋软件的实例来实现一下享元模式:
棋子颜色(内部状态)+棋子坐标(外部状态)的解决方案,UML类图如下:
1. 棋子抽象类(享元抽象类):
package com.mytest.flyweight.chess;abstract class IgoChessman {public abstract String getColor();public void display(Coordinates coord){System.out.println("棋子颜色:" + this.getColor()+",棋子位置:("+coord.getX()+","+coord.getY()+")");}
}
2. 白棋子(具体享元类):
package com.mytest.flyweight.chess;/**
* @author fbd
* @date 2019/12/30
* //白色棋子类:具体享元类
*/
public class WhiteIgoChessman extends IgoChessman {@Overridepublic String getColor() {return "白色";}
}
3. 黑棋子(具体享元类):
package com.mytest.flyweight.chess;
/**
* 黑色棋子类:具体享元类
*/
public class BlackIgoChessman extends IgoChessman {@Overridepublic String getColor() {return "黑色";}
}
4. 棋子坐标类(外部状态)
package com.mytest.flyweight.chess;/**
* @author fbd
* @date 2019/12/30
* 棋子的一个外部状态 坐标类
*/
public class Coordinates {private int x;private int y;public Coordinates(int x,int y) {this.x = x;this.y = y;}// getter / setter 省略
}
5. 享元工厂类
package com.mytest.flyweight.chess;import java.util.Hashtable;
/**
* //围棋棋子工厂类:享元工厂类,使用单例模式进行设计
*/
public class IgoChessmanFactory {//饿汉式单例模式private static IgoChessmanFactory instance = new IgoChessmanFactory();//使用Hashtable来存储享元对象,充当享元池private static Hashtable ht;private IgoChessmanFactory() {ht = new Hashtable();IgoChessman black,white;black = new BlackIgoChessman();ht.put("b",black);white = new WhiteIgoChessman();ht.put("w",white);}//返回享元工厂类的唯一实例public static IgoChessmanFactory getInstance() {return instance;}//通过key来获取存储在Hashtable中的享元对象public static IgoChessman getIgoChessman(String color) {return (IgoChessman)ht.get(color);}
}
6. 客户端测试
package com.mytest.flyweight.chess;
public class Client {public static void main(String args[]) {IgoChessman black1,black2,black3,white1,white2;IgoChessmanFactory factory;//获取享元工厂对象factory = IgoChessmanFactory.getInstance();//通过享元工厂获取三颗黑子black1 = factory.getIgoChessman("b");black2 = factory.getIgoChessman("b");black3 = factory.getIgoChessman("b");System.out.println("判断两颗黑子是否相同:" + (black1==black2));//通过享元工厂获取两颗白子white1 = factory.getIgoChessman("w");white2 = factory.getIgoChessman("w");System.out.println("判断两颗白子是否相同:" + (white1==white2));//显示棋子//显示棋子,同时设置棋子的坐标位置black1.display(new Coordinates(1,2));black2.display(new Coordinates(3,4));black3.display(new Coordinates(1,3));white1.display(new Coordinates(2,5));white2.display(new Coordinates(2,4));}
}
7. 测试结果:
结构型-享元模式-02-实例实现(围棋)相关推荐
- 设计模式(18):结构型-享元模式(Flyweight)
设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了可重用代码.让代码更容易被他人理解.保证代码可靠性. 毫无疑问,设计模式于 ...
- [设计模式-结构型]享元模式(Flyweight )
概括 名称 Flyweight 结构 动机 运用共享技术有效地支持大量细粒度的对象. 适用性 一个应用程序使用了大量的对象. 完全由于使用大量的对象,造成很大的存储开销. 对象的大多数状态都可变为外部 ...
- 【设计模式自习室】享元模式 Flyweight Pattern:减少对象数量
前言 <设计模式自习室>系列,顾名思义,本系列文章带你温习常见的设计模式.主要内容有: 该模式的介绍,包括: 引子.意图(大白话解释) 类图.时序图(理论规范) 该模式的代码示例:熟悉该模 ...
- 实现对象的复用——享元模式
本文转载自 :http://blog.csdn.net/lovelion/article/details/7667781 当前咱们国家正在大力倡导构建和谐社会,其中一个很重要的组成部分就是建设资源节约 ...
- 北风设计模式课程---享元模式
北风设计模式课程---享元模式 一.总结 一句话总结: 不仅要通过视频学,还要看别的博客里面的介绍,搜讲解,搜作用,搜实例 1.享元模式的本质是什么? 池技术:各种缓存池都是享元模式的体现 说到享元模 ...
- 设计模式--享元模式(Flyweight)
享元模式(Flyweight) 在面向对象程序设计过程中,有时会面临要创建大量相同或相似对象实例的问题.创建那么多的对象将会耗费很多的系统资源,它是系统性能提高的一个瓶颈.例如,围棋和五子棋中的黑白棋 ...
- Java设计模式之享元模式(UML类图分析+代码详解)
大家好,我是一名在算法之路上不断前进的小小程序猿!体会算法之美,领悟算法的智慧~ 希望各位博友走过路过可以给我点个免费的赞,你们的支持是我不断前进的动力!! 加油吧!未来可期!! 本文将介绍java设 ...
- 享元模式 FlyWeight 结构型 设计模式(十五)
享元模式(FlyWeight) "享"取"共享"之意,"元"取"单元"之意. 意图 运用共享技术,有效的支持大量细粒度 ...
- 设计模式(十五)享元模式(结构型)
概述 当一个软件系统在运行时产生的对象数量太多,将导致运行代价过高,带来系统性能下降等问题.例如在一个文本字符串中存在很多重复的字符,如果每一个字符都用一个单独的对象来表示,将会占用较多的内存空间,那 ...
最新文章
- JMP跳转指令的指令长度、直接转移与间接转移、段内跳转与段间跳转
- 八皇后问题判断此位置是否需合适
- monthdiff oracle_Oracle计算时间差函数
- 抖音python课程价格_抖音
- 由已打开的文件读取数据---read
- SpringBoot集成RabbitMQ消息队列搭建与ACK消息确认入门
- php中使用websocket
- RHEL5.6环境下yum安装MySQL
- React Router的Route的使用
- android显示当前时间
- 【思想落地】一文分享Qt界面的设计与开发
- linux系统的wps办公软件,Linux学习-7:Linux环境下安装WPS办公软件
- c语言知识点总结300字,大二学年自我总结300字 .doc
- 南邮计算机学院考研论坛,考南邮的心得,但愿对大家有所帮助!!!
- 集群出现块丢失,块找回,以及相关底层原理,fsck等
- 从自动驾驶新趋势看普及前景
- 【java毕业设计】基于java+SSH+jsp的酒水销售系统设计与实现(毕业论文+程序源码)——酒水销售系统
- python合并word表格单元格_合并Word 表格中单元格
- python小白新手所学内容(一)
- 继机器人披萨后,我又吃了个机器人汉堡!