博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
适配器模式之享元模式
阅读量:6713 次
发布时间:2019-06-25

本文共 1865 字,大约阅读时间需要 6 分钟。

设计模式目录

风.fox

享元模式 Flyweight Pattern

使用共享对象可有效地支持大量的细粒度的对象

通用类图

享元模式

组成

  • 抽象享元角色 Flyweight
    简单的说就是一个产品的抽象类,同时定义出对象的外部状态和内部状态的接口或实现
  • 具体享元角色 ConcreteFlyweight
    具体的一个产品类,实现抽象角色定义的业务。该角色中需要注意的是内部状态处理应该与环境无关,不应该出现一个操作改变了内部状态,同事修改了外部状态,这是绝度不允许的
  • 不可共享的享元角色 unshareConcreteFlyweight
    不存在外部状态或者安全要求(如线程安全)不能够使用共享技术的对象,该对象一般不会出现在享元工厂中
  • 享元工厂 FlyweightFactory
    职责非常简单,就是构造一个池容器,同时提供从池中获得对象的方法

通用源码

JAVA

//抽象享元角色public abstract class Flyweight{
//内部状态 private String intrinsic; //外部状态 protected final String Extrinsic; //要求享元角色必须接受外部状态 public Flyweight(String _Extrinsic){ this.Extrinsic=_Extrinsic; } //定义业务操作 public abstract void operate(); //内部状态的 public String getIntrinsic(){ return intrinsic; } public void setIntrinsic(String intrinsic){ this.intrinsic=intrinsic; }}//具体享元角色public class ConcreteFlyweight1 extends Flyweight{
//接受外部状态 public ConcreteFlyweight1(String _Extrinsic){ super(_Extrinsic); } //根据外部状态进行逻辑处理 public void operate(){ .... }}public class ConcreteFlyweight2 extends Flyweight{
//接受外部状态 public ConcreteFlyweight2(String _Extrinsic){ super(_Extrinsic); } //根据外部状态进行逻辑处理 public void operate(){ .... }}//享元工厂public class FlyweightFactory{
//定义一个池容器 private static HashMap
pool=new HashMap
(); //享元工厂 public static Flyweight getFlyweight(String Extrinsic){ //需要返回的对象 Flyweight flyweight=null; //在池中没有该对象 if(pool.containsKey(Extrinsic)){ flyweight=pool.get(Extrinsic); }else{ //根据外部状态创建享元对象 flyweight=new ConcreteFlyweight1(Extrinsic); //放到池中 pool.put(Extrinsic,flyweight); } return flyweight; }}

使用场景

系统中存在大量的相似对象

细粒度的对象都具备较接近的外部状态,而且内部状态与环境无关,也就是说对象没有特定身份
需要缓冲池的场景

你可能感兴趣的文章
Ionic 3.4.2 发布,漂亮的 HTML5 移动应用框架
查看>>
Linux Kernel 4.9-rc8,4.9 分支最后一个候选版
查看>>
想开发 Android 分支?没门!
查看>>
《Web异步与实时交互——iframe AJAX WebSocket开发实战》—— 2.2 相关关键技术及工作原理...
查看>>
《Nmap渗透测试指南》—第1章1.5节Mac OS安
查看>>
重磅,企业实施大数据的路径
查看>>
linux之cp/scp命令+scp命令详解
查看>>
Spark 源码分析 -- BlockStore
查看>>
《C语言编程初学者指南》一1.7 创建并运行第一个C程序
查看>>
学习和使用 PHP 应该注意的10件事
查看>>
《Ember.js实战》——2.5 Ember.js对象模型
查看>>
《响应式Web图形设计》一第13章 响应Web设计中的图像
查看>>
shiro session 监听
查看>>
定时任务框架Quartz的新玩法
查看>>
段前缀的使用(0504)
查看>>
.NET Framework 源码
查看>>
开源大数据周刊-第6期
查看>>
centos上一键安装jdk、tomcat脚本
查看>>
排序算法 时间、空间复杂度
查看>>
心痛的感觉
查看>>