享元模式

一、享元模式的概念

享元模式(Flyweight),运用共享技术有效地支持大量细粒度的对象,最大可能的实现对象复用。

享元工厂[FlyweightFactory]:用于创建具体享元类,维护相同的享元对象。当请求对象已经存在时,直接返回对象,不存在时,新建对象。

抽象享元[Flyweight]:定义需要共享的对象业务接口。

共享子类[ConcreteFlyweight]:实现抽象享元类的接口,包含具体逻辑,对外共享。

非共享子类[UnsharedConcreteFlyweight]:实现抽象享元类的接口,包含具体逻辑,不对外共享。

 

二、享元模式的实现

//抽象享元
public interface WebSite{
   
    public abstract void use();
}
//共享子类
puublic class ConcreteWebSite implements WebSite{
    
    private String name;
    
    public ConcreteWebSite(String name){
        this.name = name;
    }

    public void use(){
        System.out.println("The current site is " + name);
    }
}
//享元工厂
public class WebSiteFactory{ 
    private HashMap<String,WebSite> pool = new HashMap<>();
    
    public WebSite getWebSite(String name){
        if(!pool.containsKey(name)){
           pool.put(name,new ConcreteWebSite(name));
        }
        return pool.get(name);  
    }   

    public int getFactorySize(){
        return pool.size();
    }   
}
public class Test{ 

    public static void main(String[] args){
        WebSiteFactory factory = new WebSiteFactory();
        WebSite csdn = factory.getWebSite("csdn");
        csdn.use();
        WebSite blog = factory.getWebSite("blog");
        blog.use();
        WebSite csdn = factory.getWebSite("csdn");
        csdn.use();
        WebSite blog = factory.getWebSite("blog");
        blog.use();
        System.out.println(factory.size());
    }
}

三、享元模式的应用

  • 一个系统有大量相同或者相似的对象,造成内存的大量耗费。
  • 对象的大部分状态都可以外部化,可以将这些外部状态传入对象中。

具体应用:String字符串、棋类游戏开发中等...

四、享元の其他问题

  • 减少了对象的创建,降低了程序内存的占用,提高效率
  • 提高了系统的复杂度,需要分离出内部状态和外部状态

内部状态和外部状态 

五、Reference

享元模式

简说设计模式——享元模式

实现对象的复用——享元模式(一)

设计模式 | 享元模式及典型应用

六、Resource


大话设计模式

Head First 设计模式

Java设计模式

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值