《大话设计模式》C#/C++版pdf/源码下载

大话设计模式(带目录完整版)[中文PDF+源代码].zip

下载地址:http://pan.baidu.com/s/1giQP4
大话设计模式C++.pdf
下载地址:http://pan.baidu.com/s/1ABbBv
大话设计模式C++源码

下载地址:http://pan.baidu.com/s/1yzLBl

----------------------------------------------
刚刚看了访问者模式,复杂问题简单化。
class Node
{
 accept(Visitro *pVisitor);
}
class Visitor

{

apply(Node *pNode){pNode->fun();}

}

------------------------------------------------
url:http://greatverve.cnblogs.com/p/Design-patterns-down.html

      访问者模式的目的:  封装一些施加于某种数据结构元素之上的操作。一旦这些操作需要修改的话,接受这个操作的数据结构则可以保持不变。

      问题的提出:System.Collection命名空间下提供了大量集合操作对象。平时我们大多在集合中都是存储的同类型对象,像2.0中的泛型中就规定集合中只能存储指定的对象类型,要么是整形要么是字符型等,否则会报错。如果针对一个保存有不同类型对象的聚集采取某种操作该怎么办呢?

      示例:假设有一个员工报销的集合,里面存储了员工姓名和报销金额情况,而报销数据类型并不统一,有的是整形的,有的是双精度的,有的是字符串型,我们要做的就是根据具体的数据类型给出不同的显示格式,例如在整型数据后面加一个"C",(是我自己想的,整型的符号一时没想起来),在双数度数据后面加一个"D",浮点数据后面加"F",而字符串则什么也不加。

      传统实现方式:遍历集合中的元素,判断元素类型,然后做相应的处理。代码如下:会发现就会出现必须对元素类型做类型判断的条件转移语句,如果判断多了,要想维护起来也并不容易。此时可考虑采用访问者模式。 

复制代码
ArrayList _arr  =   new  ArrayList();
            _arr.Add(
" 一百元 " );
            _arr.Add(
100 );
            _arr.Add(
150.5 );
            
foreach   ( object  o  in  _arr )
            {
                
if  (o  is   string )
                {
                    Console.WriteLine(o.ToString());
                }
                
else   if  (o  is   double )
                {
                    Console .WriteLine (o.ToString ()
+ "  D " );
                }
                
else   if  (o  is  Int32)
                {
                    Console.WriteLine(o.ToString()
+ "  C " );
                }
            
            }
复制代码


 

      访问者模式适用性: 

           1:数据结构相对未定的系统,它把数据结构和作用于结构上的操作之间的耦合解脱开,使得操作集合可以相对自由地演化。
           2:被访问的类结构非常稳定的情况下使用。系统很少出现需要加入新节点的情况。如果出现需要加入新节点的情况,那么就必须在每一个访问对象里加入一个对应于这个新节点的访问操作,而这是对一个系统的大规模修改,因而是违背"开一闭"原则的。

      访问者模式的结构:

 


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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值