博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
享元模式
阅读量:5206 次
发布时间:2019-06-14

本文共 2090 字,大约阅读时间需要 6 分钟。

前言

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

一、网站抽象类

  

1     public abstract class WebSite2     {3         //"使用"方法需要传递“用户”对象4         public abstract void Use(User user);5     }

 

二、网站具体类

  

1     public class ConcreteWebSite : WebSite 2     { 3         private string name; 4         public ConcreteWebSite(string name) 5         { 6             this.name = name; 7         } 8         public override void Use(User user) 9         {10             Console.WriteLine("网站分类:" + name + " 用户:" + user.Name);11         }12     }

 

三、网站工厂类

  

1     public class WebSiteFactory 2     { 3         private Hashtable flyWeights = new Hashtable(); 4         //获得网站分类 5         public WebSite GetWebSiteCategory(string key) 6         { 7             if (!flyWeights.ContainsKey(key)) 8             { 9                 flyWeights.Add(key, new ConcreteWebSite(key));10             }11             return (WebSite)flyWeights[key];12         }13         //获得网站分类总数14         public int GetWebSiteCount()15         {16             return flyWeights.Count;17         }18     }

 

四、客户端代码

  

1     class Program 2     { 3         static void Main(string[] args) 4         { 5             WebSiteFactory f = new WebSiteFactory(); 6  7             WebSite f1 = f.GetWebSiteCategory("产品展示"); 8             f1.Use(new User("美美")); 9 10             WebSite f2 = f.GetWebSiteCategory("产品展示");11             f2.Use(new User("柔柔"));12 13             WebSite f3 = f.GetWebSiteCategory("产品展示");14             f3.Use(new User("香香"));15 16             WebSite f4 = f.GetWebSiteCategory("博客");17             f4.Use(new User("丽丽"));18 19             WebSite f5= f.GetWebSiteCategory("博客");20             f5.Use(new User("探探"));21 22             WebSite f6 = f.GetWebSiteCategory("博客");23             f6.Use(new User("静静"));24 25             Console.WriteLine("网站分类总数:{0}", f.GetWebSiteCount());26             Console.Read();27         }28     }

 

五、总结

  1、如果一个应用程序使用了大量的对象,而大量的这些对象造成了很大的存储开销就应该考虑使用。

  2、对象的大多数状态可以外部状态,如果删除对象的外部状态,那么可以用相对较少的共享对象取代很多组对象,此时可以考虑使用享元模式。

 

  参考数据:大话设计模式

转载于:https://www.cnblogs.com/hyunbar/p/10043762.html

你可能感兴趣的文章
Qt重写paintEvent方法遇到的问题
查看>>
Sql常见面试题 受用了
查看>>
关闭进程&关闭消息队列
查看>>
知识不是来炫耀的,而是来分享的-----现在的人们却…似乎开始变味了…
查看>>
vim在同一个窗口中同时编辑多个文件
查看>>
CSS背景颜色、背景图片、平铺、定位、固定
查看>>
Linux相关——记一些ubuntu相关快捷键&操作(持续更新)
查看>>
口胡:[HNOI2011]数学作业
查看>>
我的第一个python web开发框架(29)——定制ORM(五)
查看>>
Java中写文件操作
查看>>
js,jquery,css,html5特效
查看>>
python 进程池Pool以及Queue的用法
查看>>
while 循环、格式化输出、运算符
查看>>
Combination Sum III -- leetcode
查看>>
中国剩余定理
查看>>
MongoDB一些基本的命令
查看>>
尚未为数据源“RptDataSet_StatEC”提供数据源实例
查看>>
POJ 1410 Intersection
查看>>
Linux服务部署:nginx服务 nfs服务
查看>>
Spring Boot热部署(springloader)
查看>>