Flyweight_Pattern

本文展示了享元模式在Java中的实现,通过`WebsiteFactory`创建并缓存`ConcreteWebsite`实例,减少内存消耗。`User`对象访问`Website`,工厂根据类别返回相同或新的网站实例。享元模式用于高效地支持大量细粒度对象的复用。

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

package flyweight_pattern;

public class User {
    private String name;
    public User(String name) {
        this.name = name;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
}

package flyweight_pattern;

public abstract class Website {
    public abstract void use(User user);
}

package flyweight_pattern;

public class ConcreteWebsite extends Website{
    private String name = "";
    public ConcreteWebsite(String name) {
        this.name = name;
    }
    @Override
    public void use(User user) {
        System.out.println("The type of website is " + name);
        System.out.println("The reader is " + user.getName());
    }
}

package flyweight_pattern;

import java.util.Hashtable;

public class WebsiteFactory {
    private Hashtable<String, Website> flyweights = new Hashtable<String, Website>();
    public Website getWebsiteCategory(String key) {
        if(!flyweights.containsKey(key)) {
            flyweights.put(key, new ConcreteWebsite(key));
        }
        return (Website)flyweights.get(key);
    }
    public int getWebsiteCount() {
        return flyweights.size();
    }
}

package flyweight_pattern;

public class Main {
    public static void main(String args[]) {
        WebsiteFactory f = new WebsiteFactory();
        User tom = new User("Tom");
        User sam = new User("Sam");
        
        Website fx = f.getWebsiteCategory("essay");
        fx.use(tom);
        Website fy = f.getWebsiteCategory("essay");
        fy.use(sam);
        Website fz = f.getWebsiteCategory("ppt");
        fz.use(tom);
        Website ft = f.getWebsiteCategory("presentation");
        ft.use(sam);
        Website fr = f.getWebsiteCategory("presentation");
        fr.use(tom);
        System.out.println(f.getWebsiteCount());
    }
}
This is a general introduction to the 23 design patterns:
https://blog.youkuaiyun.com/GZHarryAnonymous/article/details/81567214

See more source code:[GZHarryAnonymous](https://github.com/GZHarryAnonymous/Design_Pattern)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值