一、享元模式(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_结构型模式(享元模式)的更多相关文章

  1. 【设计模式】结构型06享元模式(Flyweight Pattern)

    享元模式(Flyweight Pattern) 首先吐槽下这个名字,享元?共享元素的话感觉还是蛮好的~但是这个英文... 意图:更好的重用.管理对象,减少内存开销,节约资源. 主要解决:在有大量重复对 ...

  2. 《精通Python设计模式》学习结构型之享元模式

    这个我日常当中也没有用到过, 真的是游戏行业用得多些? 学习一下, 有个印象. import random from enum import Enum TreeType = Enum('TreeTye ...

  3. Java设计模式(5)共享模式/享元模式(Flyweight模式)

    Flyweight定义:避免大量拥有相同内容的小类的开销(如耗费内存),使大家共享一个类(元类). 为什么使用共享模式/享元模式 面向对象语言的原则就是一切都是对象,但是如果真正使用起来,有时对象数可 ...

  4. java设计模式--结构型模式--享元模式

    享元模式 概述 运用共享技术有效地支持大量细粒度的对象. 适用性 当都具备下列情况时,使用Flyweight模式: 1.一个应用程序使用了大量的对象. 2.完全由于使用大量的对象,造成很大的存储开销. ...

  5. Java设计模式(六)合成模式 享元模式

    (十一)合成模式 Composite 合成模式是一组对象的组合,这些对象能够是容器对象,也能够是单对象.组对象同意包括单对象,也能够包括其它组对象,要为组合对象和单对象定义共同的行为.合成模式的意义是 ...

  6. Java进阶篇设计模式之七 ----- 享元模式和代理模式

    前言 在上一篇中我们学习了结构型模式的组合模式和过滤器模式.本篇则来学习下结构型模式最后的两个模式, 享元模式和代理模式. 享元模式 简介 享元模式主要用于减少创建对象的数量,以减少内存占用和提高性能 ...

  7. Java设计模式之七 ----- 享元模式和代理模式

    前言 在上一篇中我们学习了结构型模式的组合模式和过滤器模式.本篇则来学习下结构型模式最后的两个模式, 享元模式和代理模式. 享元模式 简介 享元模式主要用于减少创建对象的数量,以减少内存占用和提高性能 ...

  8. C#设计模式学习笔记:(11)享元模式

    本笔记摘抄自:https://www.cnblogs.com/PatrickLiu/p/7792973.html,记录一下学习过程以备后续查用. 一.引言 今天我们要讲结构型设计模式的第六个模式--享 ...

  9. 【UE4 设计模式】享元模式 Flyweight Pattern

    概述 描述 运用共享技术有效地支持大量细粒度对象的复用.系统只使用少量的对象,而这些对象都很相似,状态变化很小,可以实现对象的多次复用. 由于享元模式要求能够共享的对象必须是细粒度对象,因此它又称为轻 ...

随机推荐

  1. anaconda使用,jupyter notebook的使用方法

    1. 通过anaconda安装不同的python环境 1) conda create -n python36 python=3.5 2)  激活虚拟环境: activate python36  # 进 ...

  2. nodejs使用sequelize操作mysql实例

    sequelize是node操作mysql的一款npm包,包含很多特性:数据库模型映射.事务处理.模型属性校验.关联映射等,花了两天时间学习了下基本的一些操作,特别是关联映射部分的操作,包含1:1.1 ...

  3. [javaSE] IO流(FIle对象递归文件列表)

    获取File对象,new出来,构造参数:String目录名 调用File对象的list()方法,获取String[]数组文件名称 循环数组,列出所有文件包含隐藏文件 递归列出所有的数据 定义一个静态方 ...

  4. JAVA_吸血鬼数字 多种方法实现

    package test4; import java.util.Arrays; /** * 从TIJ中第4章的练习10看到“吸血鬼数字”,以下几种方法实现以及执行时间对比 * 找出四位数的所有吸血鬼数 ...

  5. Bootstrap网格

    首先了解一下,什么是网格? 在平面设计中,网格是一种由一系列用于组织内容的相交的直线(垂直的.水平的)组成的结构(通常是二维的).它广泛应用于打印设计中的设计布局和内容结构.在网页设计中,它是一种用于 ...

  6. Javascript 中正则表达式验证网址

    其中ItemURL是需要验证的网址数据

  7. CentOS6.5(2)----安装Tab键自动补全功能:bash-completion

    首先要确保网络畅通,因为该过程要通过网络下载相关的软件包. 在 root 用户下,使用 cd ~/Downloads 命令进入下载文件夹,然后依次输入如下三个命令: [root@prime:~/Doc ...

  8. mustache 模板,用于构造html页面内容

    Mustache 的模板语法很简单,就那么几个: {{data}} {{#data}} {{/data}} {{^data}} {{/data}} {{.}} {{<partials}} {{{ ...

  9. Angular1.x 基础总结

    官方文档:Guide to AngularJS Documentation   w3shools    angularjs教程  wiki   <AngularJS权威教程> Introd ...

  10. redis安装、配置、启停

    Redis is an open source (BSD licensed), in-memory data structure store, used as database, cache and ...