接口版本演化引发的思考二

   接口版本演化一讲解了接口如何进行演化,基本思想是当接口发生变化的时候尽可能小的对派生类型造成影响。某种程度上也就是对“别人”的代码造成最小的影响。
    下面从设计模式的角度给出另外一个接口版本演化的方案,其核心是visitor模式。
该模式相信很多朋友都有了解。下面给出具体的实现代码:
      
 1    public interface ITest
 2    {
 3        void Accept(ITestVisitor visitor);
 4    }

 5    public class Test1 : ITest
 6    {
 7        public void Accept(ITestVisitor visitor)
 8        {
 9            visitor.Visitor(this);
10        }

11    }

12    public class Test2 : ITest
13    {
14        public void Accept(ITestVisitor visitor)
15        {
16            visitor.Visitor(this);
17        }

18    }

19    
20    public interface ITestVisitor
21    {
22        void Visitor(Test1 test1);
23        void Visitor(Test2 test2);
24    }

25    public class TestVisitor : ITestVisitor
26    {
27        public void Visitor(Test1 test1)
28        {
29        }

30        public void Visitor(Test2 test2)
31        {
32        }

33    }


   如上,Test类型增加新的服务转嫁为visitor类型增加一个新的扩展类型,符合开闭原则,是个不错的设计方案。该方案的缺点我总结了下:
 

1. 原体系必须能够增加accept方法。

2. Visitor有可能没有足够的信息(从原体系获取的)来完成动态增加的方法。

3.    原体系发生变化,访问体系也要发生变化。
    可以看到,没有完美的解决方案。这也就是软件设计的魅力所在,一切都是需求驱动。

posted on 2006-11-08 21:49  小峰  阅读(214)  评论(0)    收藏  举报

导航