JAVA 设计模式 享元模式

简介:

用途


享元模式 (Flyweight)
运用 共享技术有效地支持大量细粒度的对象。
享元模式是一种 结构型模式


结构
图-享元模式结构图

Flyweight : 它是所有具体享元类的超类或接口,通过这个接口,Flyweight 可以接受并作用于外部状态。

abstract  class Flyweight {
     public  abstract  void Operation( int extrinsicstates);
}

ConcreteFlyweight :  是继承 Flyweight 超类或实现 Flyweight 接口,并为内部状态增加存储空间。

复制代码
class ConcreteFlyweight  extends Flyweight {
    @Override
     public  void Operation( int extrinsicstates) {
        System.out.println("共享的Flyweight : " + extrinsicstates);
    }
}
复制代码

UnsharedConcreteFlyweight : 指那些不需要共享的 Flyweight 子类,因为 Flyweight 接口共享成为可能,但它并不强制共享。

复制代码
class UnsharedConcreteFlyweight  extends Flyweight {
    @Override
     public  void Operation( int extrinsicstates) {
        System.out.println("不共享的Flyweight : " + extrinsicstates);
    }
}
复制代码
FlywightFactory :是一个享元工厂,用来创建并管理 Flyweight 对象。它主要是用来确保合理地共享 Flyweight ,当用户请求一个 Flyweight 时, FlyweightFactory 对象提供一个已创建的实例或创建一个(如果对象不存在的话)。
复制代码
class FlywightFactory {
     private Hashtable<String, Flyweight> flyweights =  new Hashtable<String, Flyweight>();
    
     public FlywightFactory() {
        flyweights.put("X",  new ConcreteFlyweight());
        flyweights.put("Y",  new ConcreteFlyweight());
        flyweights.put("Z",  new ConcreteFlyweight());
    }
    
     public Flyweight GetFlyweight(String key) {
         return ((Flyweight)flyweights.get(key));
    }
}
复制代码
测试代码
复制代码
public  class FlyweightPattern {
     public  static  void main(String[] args) {
         int extrinsicstates = 1;    
        FlywightFactory factory =  new FlywightFactory();
        
        Flyweight fx = factory.GetFlyweight("X");
        fx.Operation(extrinsicstates);
        
        Flyweight fy = factory.GetFlyweight("Y");
        fy.Operation(++extrinsicstates);
        
        Flyweight fz = factory.GetFlyweight("Z");
        fz.Operation(++extrinsicstates);
        
        Flyweight uf =  new UnsharedConcreteFlyweight();
        uf.Operation(++extrinsicstates);
    }
}
复制代码

运行结果

共享的Flyweight : 1
共享的Flyweight : 2
共享的Flyweight : 3
不共享的Flyweight : 4

本文转自静默虚空博客园博客,原文链接:http://www.cnblogs.com/jingmoxukong/p/4228154.html,如需转载请自行联系原作者

相关文章
|
2月前
|
设计模式 存储 缓存
【设计模式】【结构型模式】享元模式(Flyweight)
一、入门 什么是享元模式? 享元模式(Flyweight Pattern)是一种结构型设计模式,旨在通过共享对象来减少内存使用,特别适用于存在大量相似对象的情况。 它的核心思想是将对象的内在状态(不变
104 16
|
2月前
|
设计模式 缓存 安全
【高薪程序员必看】万字长文拆解Java并发编程!(8):设计模式-享元模式设计指南
🌟 ​大家好,我是摘星!​ 🌟今天为大家带来的是并发编程中的经典对象复用设计模式-享元模式,废话不多说让我们直接开始。
63 0
|
5月前
|
设计模式 存储 缓存
「全网最细 + 实战源码案例」设计模式——享元模式
享元模式(Flyweight Pattern)是一种结构型设计模式,旨在减少大量相似对象的内存消耗。通过分离对象的内部状态(可共享、不变)和外部状态(依赖环境、变化),它有效减少了内存使用。适用于存在大量相似对象且需节省内存的场景。模式优点包括节省内存和提高性能,但会增加系统复杂性。实现时需将对象成员变量拆分为内在和外在状态,并通过工厂类管理享元对象。
224 92
|
4月前
|
设计模式 Java 数据安全/隐私保护
Java 设计模式:装饰者模式(Decorator Pattern)
装饰者模式属于结构型设计模式,允许通过动态包装对象的方式为对象添加新功能,提供比继承更灵活的扩展方式。该模式通过组合替代继承,遵循开闭原则(对扩展开放,对修改关闭)。
|
8月前
|
设计模式 消息中间件 搜索推荐
Java 设计模式——观察者模式:从优衣库不使用新疆棉事件看系统的动态响应
【11月更文挑战第17天】观察者模式是一种行为设计模式,定义了一对多的依赖关系,使多个观察者对象能直接监听并响应某一主题对象的状态变化。本文介绍了观察者模式的基本概念、商业系统中的应用实例,如优衣库事件中各相关方的动态响应,以及模式的优势和实际系统设计中的应用建议,包括事件驱动架构和消息队列的使用。
130 6
|
8月前
|
设计模式 Java 数据库连接
Java编程中的设计模式:单例模式的深度剖析
【10月更文挑战第41天】本文深入探讨了Java中广泛使用的单例设计模式,旨在通过简明扼要的语言和实际示例,帮助读者理解其核心原理和应用。文章将介绍单例模式的重要性、实现方式以及在实际应用中如何优雅地处理多线程问题。
104 4
|
9月前
|
设计模式 监控 算法
Java设计模式梳理:行为型模式(策略,观察者等)
本文详细介绍了Java设计模式中的行为型模式,包括策略模式、观察者模式、责任链模式、模板方法模式和状态模式。通过具体示例代码,深入浅出地讲解了每种模式的应用场景与实现方式。例如,策略模式通过定义一系列算法让客户端在运行时选择所需算法;观察者模式则让多个观察者对象同时监听某一个主题对象,实现松耦合的消息传递机制。此外,还探讨了这些模式与实际开发中的联系,帮助读者更好地理解和应用设计模式,提升代码质量。
Java设计模式梳理:行为型模式(策略,观察者等)
|
8月前
|
设计模式 JavaScript Java
Java设计模式:建造者模式详解
建造者模式是一种创建型设计模式,通过将复杂对象的构建过程与表示分离,使得相同的构建过程可以创建不同的表示。本文详细介绍了建造者模式的原理、背景、应用场景及实际Demo,帮助读者更好地理解和应用这一模式。
274 0
|
10月前
|
存储 设计模式 安全
Java设计模式-备忘录模式(23)
Java设计模式-备忘录模式(23)
|
10月前
|
设计模式 存储 缓存
Java设计模式 - 解释器模式(24)
Java设计模式 - 解释器模式(24)