享元模式

Posted yfy-

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了享元模式相关的知识,希望对你有一定的参考价值。

一、定义

享元模式(Flyweight),运用共享技术有效的支持大量细粒度的对象。

二、示例代码

/*外部对象*/
public class User {
    private String name;

    public User(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }
}

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

public class ConcreteWebsite extends WebSite{
 private String name;

    public ConcreteWebsite(String name) {
        this.name = name;
    }


    @Override
    public void use(User user) {
        System.out.println("网站名:"+name+",用户名:"+user.getName());
    }
}

import java.util.HashMap;

public class WebsiteFactory {
    private HashMap<String, WebSite> hashMap = new HashMap();

    public WebSite getWebSite(String name) {
        if (hashMap.containsKey(name)) {
            return hashMap.get(name);
        } else {
            ConcreteWebsite concreteWebsite = new ConcreteWebsite(name);
            hashMap.put(name, concreteWebsite);
            return new ConcreteWebsite(name);
        }
    }
    public int countWeb(){
        return hashMap.size();
    }
}

public class Client {
    public static void main(String[] args) {
        WebsiteFactory websiteFactory=new WebsiteFactory();
       WebSite webSite  =websiteFactory.getWebSite("首页");
       User user=new User("huni");
       webSite.use(user);
       WebSite webSite2  =websiteFactory.getWebSite("标题");
       User user2=new User("knock");
       webSite2.use(user2);
       WebSite webSite3  =websiteFactory.getWebSite("标题");
       User user3=new User("jack");
       webSite3.use(user3);
        System.out.println("生成的网站对象数量:"+   websiteFactory.countWeb());


    }
}

以上是关于享元模式的主要内容,如果未能解决你的问题,请参考以下文章

11-享元(Flyweight)模式Ruby实现

设计模式课程 设计模式精讲 13-1 享元模式coding

常用设计模式系列之——享元模式

23种设计模式之享元模式代码实例

享元模式

享元模式(Flyweight)