享元模式
享元模式:运用共享技术支持大量细粒度的对象。常用于系统底层开发,解决系统的性能问题,向数据库连接池,里面都是创建好的连接对象,在这些连接对象中我们需要的则直接拿来用,避免重新创建。经典用用场景:池技术。
享元模式UML图
享元模式简单实现
User类:
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;
}
}
WebSite接口:
public interface WebSite {
void use(User user);
}
ConcreteWebSite类:
public class ConcreteWebSite implements WebSite {
private String type = "";
public ConcreteWebSite(String type) {
this.type = type;
}
public void use(User user) {
System.out.println("网站的发布形式为"+type+"用户名"+user.getName());
}
}
Factory类:
public class Factory {
private HashMap<String,WebSite> map = new HashMap<String, WebSite>();
public WebSite getWebSite(String type){
if(!map.containsKey(type)){
map.put(type,new ConcreteWebSite(type));
}
return (WebSite)map.get(type);
}
public int getWebSiteCount(){
return map.size();
}
}
测试类:
public class Test {
public static void main(String[] args) {
Factory factory = new Factory();
WebSite webSite = factory.getWebSite("博客");
webSite.use(new User("小郭"));
WebSite webSite2 = factory.getWebSite("博客");
webSite2.use(new User("小邹"));
int i = factory.getWebSiteCount();
System.out.println(i);
//网站的发布形式为博客用户名小郭
//网站的发布形式为博客用户名小邹
//1
}
}
总结
享元模式:“享”就表示共享,“元”便是对象。系统中有大量对象,这些对象消耗了大量内存,并且对象的大部分可以外部化是,我么就可以考虑使用享元模式。