设计模式的理解:享元模式 (Flyweight)

享元模式 (Flyweight),是为了解决 使用大量细粒度对象时,代价过高性能变低的问题。

例如在编辑一个word文档时每个字符都可以改变字体大小,字体类型,字体颜色。相应的,我们会为每个字符创建一个对象。那么如果要编辑1万个文字的文本,就需要创建1万个对象,由于创建如此多的对象就会给系统带来较大的负荷。实际上,在这些编辑的这1万个字符中,有很大一部分的字体大小,字体类型,字体颜色都是一样的,即状态是一样的。享元模式的做法就是只为这些相同的“状态”创建一个对象,如果需要这种状态就将自己的引用指向该对象。实现共享。享元模式大部分通过缓存技术实现。

 

例如  根据网站类型名称来创建和共享对象。示例来自 https://www.cnblogs.com/adamjwh/p/9070107.html  。 

//抽象的网站类 
public abstract class WebSite { public abstract void use();     }
//具体的网站类
public class ConcreteWebSite extends WebSite {private String name = "";public ConcreteWebSite(String name) {this.name = name;}@Overridepublic void use() {System.out.println("网站分类:" + name);}}
//网站工厂类,用于创建具体的网站对象
public class WebSiteFactory {private HashMap pool = new HashMap<>();//获得网站分类public WebSite getWebSiteCategory(String key) {if(!pool.containsKey(key)) {pool.put(key, new ConcreteWebSite(key));}return (WebSite)pool.get(key);}//获得网站分类总数public int getWebSiteCount() {return pool.size();}}//main 方法
public class Client {public static void main(String[] args) {WebSiteFactory factory = new WebSiteFactory();WebSite fx = factory.getWebSiteCategory("产品展示");fx.use();WebSite fy = factory.getWebSiteCategory("产品展示");fy.use();WebSite fz = factory.getWebSiteCategory("产品展示");fz.use();WebSite fa = factory.getWebSiteCategory("博客");fa.use();WebSite fb = factory.getWebSiteCategory("博客");fb.use();WebSite fc = factory.getWebSiteCategory("博客");fc.use();System.out.println("网站分类总数为:" + factory.getWebSiteCount()); //输出为2}}

 


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部