适配器模式之享元模式

简介: 设计模式目录 http://blog.csdn.net/fenglailea/article/details/52733435 风.fox享元模式 Flyweight Pattern使用共享对象可有效地支持大量的细粒度的对象通用类图组成抽象享元角色 Flyweight 简单的说就是一个产品的抽象类,同时定义出对象的外部状态和内部状态的

设计模式目录
http://blog.csdn.net/fenglailea/article/details/52733435
风.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<String,Flyweight> pool=new HashMap<String,Flyweight>();
    //享元工厂
    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;
    }
}

使用场景

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

目录
相关文章
|
4月前
|
设计模式 C++
结构型 适配器模式
结构型 适配器模式
16 0
|
6月前
|
设计模式 存储 缓存
设计模式~享元模式(flyweight)-09
目录 (1)优点: (2)缺点: (3)使用场景: (4)注意事项: (5)应用实例:
27 0
|
8月前
|
设计模式 存储 缓存
设计模式-结构型模式:享元模式
设计模式-结构型模式:享元模式
|
11月前
|
存储 缓存 Java
结构型模式-享元模式
结构型模式-享元模式
102 0
|
11月前
|
Java 程序员 API
结构型模式-适配器模式
结构型模式-适配器模式
70 0
|
11月前
|
应用服务中间件 智能硬件 容器
结构型模式-外观模式
结构型模式-外观模式
59 0
|
设计模式 移动开发 NoSQL
设计模式 - 结构型模式_享元模式
享元⼯⼚的设计,在⼀些有⼤量᯿复对象可复⽤的场景下,使⽤此场景在服务端减少接⼝的调⽤,在客户端减少内存的占⽤。是这个设计模式的主要应⽤⽅式。
98 0
设计模式 - 结构型模式_享元模式
|
存储 设计模式 缓存
|
设计模式 Java
【玩转23种Java设计模式】结构型模式篇:适配器模式
适配器模式(Adapter Pattern)将某个类的接口转换成客户端期望的另一个接口表示,主的目的是兼容性,让原本因接口不匹配不能一起工作的两个类可以协同工作。适配器模式属于结构型模式,主要分为三类:类适配器模式、对象适配器模式、接口适配器模式。
【玩转23种Java设计模式】结构型模式篇:适配器模式
|
存储 设计模式 缓存