一、享元模式介绍
 
 
二、享元模式使用
 
2.1 示例关系:
 

 
2.2 代码实现:
 
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;
    }
}
abstract class WebSite {
    public abstract void use(User user);
}
class ConcreteWebSite extends WebSite {
    
    private String type;
    public ConcreteWebSite(String type) {
        this.type = type;
    }
    @Override
    public void use(User user) {
        System.out.println("网站发布形式是 :" + this.type +
                ",用户" + user.getName() + "正在使用网站...");
    }
}
class WebSiteFactory {
    private Map<String, ConcreteWebSite> pool = new HashMap<>(8);
    
    public WebSite getWebSiteCategory(String type) {
        
        if (!pool.containsKey(type)) {
            pool.put(type, new ConcreteWebSite(type));
        }
        return pool.get(type);
    }
    
    public int getWebSiteCount() {
        return this.pool.size();
    }
}
public class Client {
    public static void main(String[] args) {
        WebSiteFactory factory = new WebSiteFactory();
        factory.getWebSiteCategory("微博").use(new User("tom"));
        factory.getWebSiteCategory("微博").use(new User("jack"));
        factory.getWebSiteCategory("知乎").use(new User("lucas"));
        factory.getWebSiteCategory("微信公众号").use(new User("jan"));
        System.out.println("当前网站分类共有" + factory.getWebSiteCount() + "种。");
        
        
        
        
        
    }
}
 
三、享元模式总结