结构型-享元模式-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-实例实现(围棋)相关推荐

  1. 设计模式(18):结构型-享元模式(Flyweight)

    设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了可重用代码.让代码更容易被他人理解.保证代码可靠性. 毫无疑问,设计模式于 ...

  2. [设计模式-结构型]享元模式(Flyweight )

    概括 名称 Flyweight 结构 动机 运用共享技术有效地支持大量细粒度的对象. 适用性 一个应用程序使用了大量的对象. 完全由于使用大量的对象,造成很大的存储开销. 对象的大多数状态都可变为外部 ...

  3. 【设计模式自习室】享元模式 Flyweight Pattern:减少对象数量

    前言 <设计模式自习室>系列,顾名思义,本系列文章带你温习常见的设计模式.主要内容有: 该模式的介绍,包括: 引子.意图(大白话解释) 类图.时序图(理论规范) 该模式的代码示例:熟悉该模 ...

  4. 实现对象的复用——享元模式

    本文转载自 :http://blog.csdn.net/lovelion/article/details/7667781 当前咱们国家正在大力倡导构建和谐社会,其中一个很重要的组成部分就是建设资源节约 ...

  5. 北风设计模式课程---享元模式

    北风设计模式课程---享元模式 一.总结 一句话总结: 不仅要通过视频学,还要看别的博客里面的介绍,搜讲解,搜作用,搜实例 1.享元模式的本质是什么? 池技术:各种缓存池都是享元模式的体现 说到享元模 ...

  6. 设计模式--享元模式(Flyweight)

    享元模式(Flyweight) 在面向对象程序设计过程中,有时会面临要创建大量相同或相似对象实例的问题.创建那么多的对象将会耗费很多的系统资源,它是系统性能提高的一个瓶颈.例如,围棋和五子棋中的黑白棋 ...

  7. Java设计模式之享元模式(UML类图分析+代码详解)

    大家好,我是一名在算法之路上不断前进的小小程序猿!体会算法之美,领悟算法的智慧~ 希望各位博友走过路过可以给我点个免费的赞,你们的支持是我不断前进的动力!! 加油吧!未来可期!! 本文将介绍java设 ...

  8. 享元模式 FlyWeight 结构型 设计模式(十五)

    享元模式(FlyWeight)  "享"取"共享"之意,"元"取"单元"之意. 意图 运用共享技术,有效的支持大量细粒度 ...

  9. 设计模式(十五)享元模式(结构型)

    概述 当一个软件系统在运行时产生的对象数量太多,将导致运行代价过高,带来系统性能下降等问题.例如在一个文本字符串中存在很多重复的字符,如果每一个字符都用一个单独的对象来表示,将会占用较多的内存空间,那 ...

最新文章

  1. JMP跳转指令的指令长度、直接转移与间接转移、段内跳转与段间跳转
  2. 八皇后问题判断此位置是否需合适
  3. monthdiff oracle_Oracle计算时间差函数
  4. 抖音python课程价格_抖音
  5. 由已打开的文件读取数据---read
  6. SpringBoot集成RabbitMQ消息队列搭建与ACK消息确认入门
  7. php中使用websocket
  8. RHEL5.6环境下yum安装MySQL
  9. React Router的Route的使用
  10. android显示当前时间
  11. 【思想落地】一文分享Qt界面的设计与开发
  12. linux系统的wps办公软件,Linux学习-7:Linux环境下安装WPS办公软件
  13. c语言知识点总结300字,大二学年自我总结300字 .doc
  14. 南邮计算机学院考研论坛,考南邮的心得,但愿对大家有所帮助!!!
  15. 集群出现块丢失,块找回,以及相关底层原理,fsck等
  16. 从自动驾驶新趋势看普及前景
  17. 【java毕业设计】基于java+SSH+jsp的酒水销售系统设计与实现(毕业论文+程序源码)——酒水销售系统
  18. python合并word表格单元格_合并Word 表格中单元格
  19. python小白新手所学内容(一)
  20. 继机器人披萨后,我又吃了个机器人汉堡!

热门文章

  1. Chromium插件(Plugin)机制简要介绍和学习计划
  2. 前台界面显示图片问题
  3. Pytorch统计二维张量每一行的非零个数
  4. server.js文件配置
  5. 【电容电压不能突变的理解】
  6. 计算机网络参考模型(OSI七层与TCP/IP协议)
  7. HTML5画布(canvas)
  8. LTE-A载波聚合技术(12)---PUCCH上下行A/N资源分配
  9. MFC Windows 程序设计(7)
  10. 个人网站备案时ICP备案的网站建设方案书怎么写?