设计模式之享元模式

  1. 什么是享元模式(Flyweight)

    • 享元模式是池技术的重要实现方式
    • 使用共享对象可有效地支持大量的细粒度的对象,避免过多的对象造成内存溢出
  2. 享元模式:内部状态和外部状态

    • 内部状态:保持不变的状态,可以作为共享的状态
    • 外部状态:一般随着环境的状态而改变的状态
  3. 享元对象的角色

    • Flyweight 抽象享元角色,产品的抽象类,同时定义出对象的外部状态和内部状态的接口或实现。
    • ConcreteFlyweight 具体享元角色,具体的一个产品类,实现抽象角色定义的业务
    • unsharedConcreteFlyweight 不可共享的享元角色
    • FlyweightFactory 构造一个池容器,同时提供从池中获取对象的方法。
  4. 示例代码

package com.pattern.flyweight;

/**
 * 享元模式,抽象类,定义基本的操作
 * @author yjzhou
 */
public abstract class Flyweight {
    //内部状态
    private  String intrinsic;
    //外部状态
    protected  final String extrinsic;

    public Flyweight(String extrinsic){
        this.extrinsic = extrinsic;
    }

    //定义业务操作
    public abstract void operate();

    public void setIntrinsic(String intrinsic){
        this.intrinsic = intrinsic;
    }

    public String getExtrinsic(){
        return this.extrinsic;
    }

    public String getIntrinsic(){
        return this.intrinsic;
    }
}
package com.pattern.flyweight;

/**
 * 具体的享元类,实现具体的操作
 * @author yjzhou
 */
public class ConcreteFlyweight extends Flyweight {

    public ConcreteFlyweight(String extrinsic) {
        super(extrinsic);
    }

    @Override
    public void operate() {
        System.out.println(this);
    }

    @Override
    public String toString() {
        return super.getIntrinsic()+super.getIntrinsic();
    }
}
package com.pattern.flyweight;

import java.util.HashMap;
import java.util.Map;

/**
 * 享元工厂类,获取需要的享元对象
 * @author yjzhou
 */
public class FlyweightFactory {
    //定义一个池容器
    private static Map<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 ConcreteFlyweight(extrinsic);
            //将对象放到池中
            pool.put(extrinsic,flyweight);
        }
        return flyweight;
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值