享元模式:运用共享技术有效的支持大量细粒度的对象。
享元模式可以避免大量非常相似的开销。在程序中如果发现某些实例除了几个参数不同以外基本相同,那我们就不需要一直new对象,可以用享元模式减少实例化,期间把参数转移到外部在方法调用时将其传递进来就行。
享元模式使用的场景:
如果一个应用程序使用了大量的对象,而这些大量的对象造成很大的存储开销就应该考虑,还有就是对象的大多数状态可以用外部状态,如果删除对象的外部状态,就可以较少的共享对象取代多组对象,此时也可以考虑(是不是和单例很类似)。
public abstract class Absweb {
public abstract void web(String name);
}
public class Boke extends Absweb {
@Override
public void web(String name) {
System.out.println(name+"的博客");
}
}
public class Article extends Absweb {
@Override
public void web(String name) {
System.out.println(name+"的文章");
}
}
public class WebFaction {
private Hashtable<String,Absweb> absweb = new Hashtable();
public WebFaction(){
absweb.put("b",new Boke());
absweb.put("w",new Article());
}
public Absweb getAbsweb(String name) {
return absweb.get(name);
}
public void setAbsweb(Hashtable<String, Absweb> absweb) {
this.absweb = absweb;
}
}
public class test {
public static void main(String[] args) {
//我们本来要建lhh的博客需要new
//建njx的博客也需要new
//现在用的是一个
WebFaction webFaction = new WebFaction();
Absweb absweb = webFaction.getAbsweb("b");
absweb.web("lhh");
Absweb absweb1 = webFaction.getAbsweb("w");
absweb1.web("lhh");
Absweb absweb2 = webFaction.getAbsweb("w");
absweb1.web("njx");
}
}
==
lhh的博客
lhh的文章
njx的文章