设计模式17---享元模式

本文介绍了享元模式的设计理念及其在网站开发中的应用案例。通过共享相同部分并区分不同部分,享元模式能够有效减少资源浪费,提高代码复用率。文章还对比了享元模式与原型模式的区别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.客户需要做网站,有很多客户,每个需求细节不同,但是主体框架类似,并且如何有很多客户的话,将会照成

大量的资源浪费,所以,把相同的部分进行共享,通过ID的方式来加以区别不同的部分。

2.UML

Flyweight定义了共享的部分,ConcreateFlyweight定义了内部状态,或者说相同的部分。

UnsharedFlyWeight 定义了外部状态,不同的部分。

3.code:

public abstract class WebSite {
    public abstract void Use(User user);
}
package com.jayfulmath.designpattern.flyweight;

import java.util.Hashtable;

public class WebSiteFactory {
    private Hashtable<String, WebSite> mTable = new Hashtable<>();
    
    public WebSite getWebSiteCategory(String key)
    {
        if(!mTable.contains(key))
        {
            mTable.put(key, new ConcreateWebSite(key));
        }
        
        return mTable.get(key);
    }
    
    public int getWebsiteCount()
    {
        return mTable.size();
    }
}
package com.jayfulmath.designpattern.flyweight;

public class User {
    String  name;

    public User(String name) {
        super();
        this.name = name;
    }
    
    
}
package com.jayfulmath.designpattern.flyweight;

public class ConcreateWebSite extends WebSite {

    String name;
    
    
    public ConcreateWebSite(String name) {
        super();
        this.name = name;
    }


    @Override
    public void Use(User user) {
        System.out.println("WebSite :"+name+"\t User:"+user.name);
    }

}
package com.jayfulmath.designpattern.flyweight;

import com.jayfulmath.designpattern.main.BasicExample;

public class FlyweightMain extends BasicExample {

    @Override
    public void startDemo() {
        WebSiteFactory factory = new WebSiteFactory();
        
        WebSite fx = factory.getWebSiteCategory("产品展示");
        fx.Use(new User("X"));
        
        WebSite fy = factory.getWebSiteCategory("产品展示");
        fy.Use(new User("Y"));
        
        WebSite fz = factory.getWebSiteCategory("博客");
        fz.Use(new User("Z"));
    }

}

当事物可以分为外部状态和内部状态,而且去除外部状态后,内部状态可以归并为多组的时候,可以使用享元模式。

4.享元模式 和原型模式的区别

享元模式 和原型模式都是复制元素或者内容。

但是原型模式 是复用,也就是实例是多份,但是内容相同。

而享元模式是共用,于单例模式相识。

转载于:https://www.cnblogs.com/deman/p/4203690.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值