[19/04/28-星期日] GOF23_结构型模式(享元模式)
一、享元模式(FlyWeight,轻量级)






【共享类与非共享类】
/***
*FlyweightFactory享元工厂类: 创建并管理享元对象,享元池一般设计成键值对
*/
package cn.sxt.flyWeight; import java.util.HashMap;
import java.util.Map; public class ChessFactory {
//享元池,容器
private static Map<String, Chess> map=new HashMap<String, Chess>(); public static Chess getChess(String color) {
if (map.get(color)!=null) {//如果池子里边有那种颜色的棋子,返回一个即可,如果没有创建一个
return map.get(color);
}else {
Chess cfwChess=new ConcreteChess(color);
map.put(color, cfwChess);
return cfwChess;
} } } /***
* 位置坐标,外部状态 UnsharedConcreteFlyWeight非共享享元类
* 不能被共享的子类可以设计为非共享享元类
*/
package cn.sxt.flyWeight; public class Coordinate {
private int x,y; public Coordinate(int x, int y) {
super();
this.x = x;
this.y = y;
} public int getX() {
return x;
} public void setX(int x) {
this.x = x;
} public int getY() {
return y;
} public void setY(int y) {
this.y = y;
} }
【享元工厂】
/***
*FlyweightFactory享元工厂类: 创建并管理享元对象,享元池一般设计成键值对
*/
package cn.sxt.flyWeight; import java.util.HashMap;
import java.util.Map; public class ChessFactory {
//享元池,容器
private static Map<String, Chess> map=new HashMap<String, Chess>(); public static Chess getChess(String color) {
if (map.get(color)!=null) {//如果池子里边有那种颜色的棋子,返回一个即可,如果没有创建一个
return map.get(color);
}else {
Chess cfwChess=new ConcreteChess(color);
map.put(color, cfwChess);
return cfwChess;
} } }
【客户端】
/**
*
*/
package cn.sxt.flyWeight; public class Client {
public static void main(String[] args) {
Chess chess1=ChessFactory.getChess("黑色");
Chess chess2=ChessFactory.getChess("黑色");
System.out.println(chess1);
System.out.println(chess2);//输出结果与chess1的结果一样,说明它们共享一个引用对象 //增加外部状态的处理,加坐标
chess1.display(new Coordinate(10, 7));
chess2.display(new Coordinate(5, 7)); }
}
【UML类图】

二、7种结构模式总结


[19/04/28-星期日] GOF23_结构型模式(享元模式)的更多相关文章
- 【设计模式】结构型06享元模式(Flyweight Pattern)
享元模式(Flyweight Pattern) 首先吐槽下这个名字,享元?共享元素的话感觉还是蛮好的~但是这个英文... 意图:更好的重用.管理对象,减少内存开销,节约资源. 主要解决:在有大量重复对 ...
- 《精通Python设计模式》学习结构型之享元模式
这个我日常当中也没有用到过, 真的是游戏行业用得多些? 学习一下, 有个印象. import random from enum import Enum TreeType = Enum('TreeTye ...
- Java设计模式(5)共享模式/享元模式(Flyweight模式)
Flyweight定义:避免大量拥有相同内容的小类的开销(如耗费内存),使大家共享一个类(元类). 为什么使用共享模式/享元模式 面向对象语言的原则就是一切都是对象,但是如果真正使用起来,有时对象数可 ...
- java设计模式--结构型模式--享元模式
享元模式 概述 运用共享技术有效地支持大量细粒度的对象. 适用性 当都具备下列情况时,使用Flyweight模式: 1.一个应用程序使用了大量的对象. 2.完全由于使用大量的对象,造成很大的存储开销. ...
- Java设计模式(六)合成模式 享元模式
(十一)合成模式 Composite 合成模式是一组对象的组合,这些对象能够是容器对象,也能够是单对象.组对象同意包括单对象,也能够包括其它组对象,要为组合对象和单对象定义共同的行为.合成模式的意义是 ...
- Java进阶篇设计模式之七 ----- 享元模式和代理模式
前言 在上一篇中我们学习了结构型模式的组合模式和过滤器模式.本篇则来学习下结构型模式最后的两个模式, 享元模式和代理模式. 享元模式 简介 享元模式主要用于减少创建对象的数量,以减少内存占用和提高性能 ...
- Java设计模式之七 ----- 享元模式和代理模式
前言 在上一篇中我们学习了结构型模式的组合模式和过滤器模式.本篇则来学习下结构型模式最后的两个模式, 享元模式和代理模式. 享元模式 简介 享元模式主要用于减少创建对象的数量,以减少内存占用和提高性能 ...
- C#设计模式学习笔记:(11)享元模式
本笔记摘抄自:https://www.cnblogs.com/PatrickLiu/p/7792973.html,记录一下学习过程以备后续查用. 一.引言 今天我们要讲结构型设计模式的第六个模式--享 ...
- 【UE4 设计模式】享元模式 Flyweight Pattern
概述 描述 运用共享技术有效地支持大量细粒度对象的复用.系统只使用少量的对象,而这些对象都很相似,状态变化很小,可以实现对象的多次复用. 由于享元模式要求能够共享的对象必须是细粒度对象,因此它又称为轻 ...
随机推荐
- docker部署ELK日志处理
docker环境下部署的ELK系统,日志处理,保留最近五个小时的日志 dockerlog.sh #!/bin/bash logs=`find /var/lib/docker/containers/ - ...
- 三:Bootstrap-js插件
模式框: <button class="btn btn-default btn-lg" data-toggle="modal" data-target=& ...
- intellij idea Entity类报错“Cannot resolve table”
https://blog.csdn.net/u014290233/article/details/54311954 转载,以便下次查看
- 从MySQL到ORM(三):连接、存储过程和用户权限
一.联结表 数据仍使用前文中的数据. 1.子查询 作为子查询的SELECT语句只能查询单个列.企图检索多个列将返回错误. -- 作为查询条件使用 -- 查看TNT2订单对应的客户ip(order表) ...
- [LeetCode]Longest Palindromic Substring题解(动态规划)
Longest Palindromic Substring: Given a string s, find the longest palindromic substring in s. You ma ...
- Tomcat的下载安装及使用
macOS Sierra Version 10.13.2 环境下Tomcat的下载与安装以及InterlliJ IDEA 2017.2 环境下配置Tomcat 与创建Web项目 一.Tomcat的下载 ...
- JS 写入到文件
//js写文件 function doSave(value, type, name) { var blob; if (typeof window.Blob == "function" ...
- FCC上的javascript算法题之中级篇
FCC中的javascript中级算法题解答 中级算法的题目中用到了很多js的知识点,比如迭代,闭包,以及对json数据的使用等等,现在将自己中级算法的解答思路整理出来供大家参考讨论.欢迎大家提出新的 ...
- canvas createPattern()方法详解
createPattern作用 createPattern() 方法在指定的方向内重复指定的元素. 元素可以是图片.视频,或者其他 <canvas> 元素. 被重复的元素可用于绘制/填充矩 ...
- 使用js在HTML中自定义字符串格式化方法
Python中支持字符串格式化,其基本形式如下: str = "I'm {name},{age} years old" print(str.format(name="te ...