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

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

享元模式——运用共享技术有效地支持大量细粒度的对象。享元模式可以避免大量相似类的开销,在软件开发中如果需要生成大量细粒度的类实例来表示数据,如果这些实例除了几个参数外基本上都是相同的,这时候就可以使用享元模式来大幅度减少需要实例化类的数量。如果能把这些参数(指的这些类实例不同的参数)移动类实例外面,在方法调用时将他们传递进来,这样就可以通过共享大幅度地减少单个实例的数目。

享元模式的使用场景:

当系统中大量使用某些相同或者相似的对象,这些对象要耗费大量的内存,并且这些对象剔除外部状态后可以通过一个对象来替代,这时可以考虑使用享元模式。在软件系统中享元模式大量用于各种池技术,如数据库连接对象池,字符串缓存池,HttpApplication池等。

享元模式的优点:

通过对象的复用减少了对象的数量,节省内存。

享元模式的缺点:

需要分离对象的外部状态和内部状态,使用不当会引起线程安全问题,提高了系统的复杂度。

  在这里插入图片描述

namespace 享元模式{    class Program    {        static void Main(string[] args)        {                 CarFactory factory=new CarFactory();            Driver driver1=new Driver("小明");            factory.GetCar("红色").Use(driver1);            Driver driver2=new Driver("小白");            factory.GetCar("蓝色").Use(driver2);            Driver driver3 = new Driver("小红");            factory.GetCar("红色").Use(driver3);            Console.ReadKey();        }    }        //司机类    public class Driver    {        public string Name { get; set; }        public Driver(string name)        {            this.Name = name;        }    }    ///     /// 抽象享元角色类     ///     public  abstract class Car    {        public abstract void Use(Driver driver);    }    ///     /// 具体享元角色:实现抽象享元角色所规定的接口。    ///     public class RealCar : Car    {        private string Color;        public RealCar(string color)        {            this.Color = color;        }        public override void Use(Driver driver)        {            Console.WriteLine(driver.Name+"开"+this.Color+"的车");        }    }    ///     /// 工厂类    ///     public class CarFactory    {        public Dictionary
carPools=new Dictionary
(); public CarFactory() { carPools.Add("红色",new RealCar("红色")); carPools.Add("绿色", new RealCar("绿色")); } //获取汽车 public Car GetCar(string key) { // //如果车库有就用车库里的车,车库没有就买一个(new一个) if (!carPools.ContainsKey(key)) { carPools.Add(key,new RealCar(key)); } return carPools[key]; } }}

转载地址:http://jcrxo.baihongyu.com/

你可能感兴趣的文章
我的友情链接
查看>>
Linux系统新手学习的11点建议
查看>>
Android SDK:构建一个购物中心搜索的应用(二)-Points of Interest
查看>>
查询oracle数据库编码
查看>>
分发系统-expect-批量同步文件、批量执行命令
查看>>
activiti相关配置
查看>>
Exchange 2010邮件收发信大小限制
查看>>
js闭包浅了解
查看>>
c++中const引用传值
查看>>
【微软面试智力题】12个球,3次称量,找重量不同的那个球。
查看>>
dojo框架之创建自定义的类
查看>>
php小代码----树形菜单生成
查看>>
VMware VSAN5.5扩容篇
查看>>
Zend API:pval/zval 数据结构
查看>>
晒晒公司电脑配置
查看>>
Looper.myLooper().quit() 报 NullPointerException
查看>>
SSH1还是SSH2与Annotation还是Xml配置的问题
查看>>
简单构建工具SBT
查看>>
分享一个快速开发jQuery插件工具:jqueryboilerplate(转)
查看>>
Training的第二十天
查看>>