白话设计模式--结构型模式--享元模式和代理模式

     

     很久没有写了,这段时间事情比较多,心情也不是特别愉快,所以学习都停滞了。昨天给我妈打了个电话,心情一下子好多了,决定要重新振作喽,呵呵 写的不好请大家多多包含啊  要是能给大家一点儿启发那我就高兴死了,如果没有也请大家轻点儿拍砖,希望和大家共同进步。

     谈起享元模式,可能大家都是听说过没怎么用过。确实,它更多的关注的是对系统性能的优化,减少对象内存占用量。主要做法就是把那些对象之间共享的部分抽取出来,在调用对象时只需要移动指针而不用再重新创建重复的对象。
需要注意的是:
     当共享对象小于一个指针的大小时,没必要了( 比如 char,2 bytes)。

     dotnet中字符串本身应用了享元模式(相同字符串只有一个实际存在,其它都是指针指的)。享元模式解决的问题是对象代价的问题,基本不存在抽象性问题。采用的是对象共享的做法来降低大量的小对象对系统造成的压力。

 

     而代理模式相对来说就应用的比较广了,不,确切的说是非常的广。它其实就是增加一个中间层,把对象之间的直接访问变成间接访问。

     人,操作系统和硬件就是一个最简单的例子,操作系统就是硬件的代理,人通过操作系统这个代理访问硬件并完成任务。操作系统以及各种软件都是代理。

     那在什么情况下才要用代理呢?比如说,人要直接和硬件交互,那就太麻烦了,增加了复杂性,所以在直接访问过于复杂,开销很大或者其它方面给我们带来很多麻烦的时候,就用代理模式。代理模式就是屏蔽管理一些复杂性。

     在实际情况中,代理模式大多应用于分布式的系统中不同位置的对象之间的交互,这里的不同位置可能是不同机器或者跨internet,比如webservice;访问控制,比如安全控制,缓存控制;屏蔽一些实现细节,比如数据访问等等。

     代理模式不难理解,难点在于实现细节。在实现过程中,可能用到soap,http等网络协议,对于XML的操作以及一些其它方面的技术。在代理调用真正对象的过程中,会有很大的弹性空间,而不仅仅是代理直接调用真对象。如果直接调用的话,代理模式就失去其意义了。

     在C#中,最典型的例子就是stringbuilder,它就是一个代理(它使用了copy-on-write技术对字符串进行了处理,节省了内存,效率比较高--copy-on-write指的是只有在字符串发生改变的时候才重新copy一次然后再更改),stringbuilder这个代理就使用了copy-on-write技术对字符串进行控制。

转载于:https://www.cnblogs.com/GodSpeed/archive/2008/12/27/1363533.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值