五千年(敝帚自珍)

主题:【原创】JAVA和C#,武当和少林之争! -- Highway

共:💬137 🌺299 🌵10
分页树展主题 · 全看首页 上页
/ 10
下页 末页
            • 家园 这个要和无斋兄商榷一下

              delegate实际上是对只有一个method的interface和其实现的一种简化写法。我个人认为delegate是非常方便的,象Groovy这些基于Java的script languages都在考虑或者已经实现enclosure--实际上是delegate的更为强大的变种。不过Java本身再加delegate不太容易了,也不一定有好处,因为delegate被滥用的可能性太大了--大家都把函数传来传去,对class这一层的设计注意力自然会降低。

              • 家园 Was "enclosure" typo of "closure"?
              • 家园 我觉得delegate更像Functor

                Java我不熟,自己玩儿过一会,但从未正经做过项目,

                不敢乱发言。只是从C/C++/C#的角度来探讨一下。

                带实现的Interface就不是Interface,而是concrete class了。

                因此我觉得是更像STL中的Fuctor,function当作object用。

                同意兄台这个看法,delegate非常容易使用所以容易被滥用。

                事实上这也是普遍的情况,越好用的东西越容易被乱用。

                • 家园 其实都是interface

                  functor也是,只不过定义来自lambda体系而已。其实都是interface。你想你定义delegate的时候也要给出signature,这实际上就是定义了一个单成员的interface。然后实际用这个delegate的时候,你要给出符合该signature的某一个具体函数,那实际上就是给出一个该interface的实现。

                  从这里可以看出,delegate虽然方便,但是有一点局限性,就是传递的函数显然是stateless,相比之下,以实现interface的class形式出现,就可以是stateful,基于stateful的callback对于鼓励OO设计大有好处。

                  • 家园 嗯,魔法兄说的有理

                    献朵花!

                    不过Functor可以stateful,delegate function也可以stateful。

                • 家园 It is meant to wrap up functions to use as callbacks. Speaking of

                  functors in C++, I think the best so far is boost::lambda. It is so cool. It almost equals to closures.

            • 家园 总结的好!
      • 家园 不妨这么理解:Your class delegates works to interfaces.

        未必符合C#的规则,但我觉得广义上概括了delegate和interface的基本含义。

      • 家园 delegate通俗的说就是类型安全的函数指针

        个人感觉很多地方用起来比接口方便,对现有代码的侵入也小多了

      • 家园 在设计模式的上下文中

        delegate指用其它的对象来完成某功能,比如可以用传入函数指针。

        interface则指类需要实现的某些方法,所有实现该接口的类都必须实现这些方法。

        • 家园 设计模式之一叫作“装饰”的

          理解了它也就明白了什么叫“委托”。本来decoration这个设计模式有一个别名就叫delegation的。

      • 家园 delegate恐怕是你我编程时最常用的

        写一个类,在其中生成一个对象,然后调用这个对象的方法,这就是“delegation”——委托。

        如果对象的可重用性比较高,或者想在对象间实现较低的耦合,那么使用接口较为合适。接口与类是骨和肉的关系,如果要维护一个大的系统,那么头一件事就是要搞清系统内各种接口间的关系,就好像好的人体画或者雕塑要“见骨”一样。

        最要不得的就是继承——这是“四人帮”持的观点。

      • 家园 Excerpt from "The Java Programming Language" 4th Edition

        An interface is like a class but has only empty declarations of its methods. The designer of the interface declares the methods that must be supported by classes that implement the interface and declares what those methods should do. Here is a Lookup interface for finding a value in a set of values:

        interface Lookup {

        /** Return the value associated with the name, or

        * null if there is no such value */

        Object find(String name);

        }

        delegate是啥就不知道了。

分页树展主题 · 全看首页 上页
/ 10
下页 末页


有趣有益,互惠互利;开阔视野,博采众长。
虚拟的网络,真实的人。天南地北客,相逢皆朋友

Copyright © cchere 西西河