zoukankan      html  css  js  c++  java
  • delegate模式

    今天看实验室一个项目的源码,其中设计模式随处可见。。

    这是一个Mesh类,其中有一个friend class : MeshDelegate, 显然是一个delegate模式了。

    参考Wiki上的条目:

    一个简单的用法:

     class RealPrinter { // the "delegate"
         void print() { 
           System.out.print("something"); 
         }
     }
     
     class Printer { // the "delegator"
         RealPrinter p = new RealPrinter(); // create the delegate 
         void print() { 
           p.print(); // delegation
         } 
     }
     
     public class Main {
         // to the outside world it looks like Printer actually prints.
         public static void main(String[] args) {
             Printer printer = new Printer();
             printer.print();
         }
     }

    instead of performing one of its stated tasks, delegates that task to an associated helper object. It passes the buck, so to speak (technically, an Inversion of Responsibility). The helper object is called the delegate. The delegation pattern is one of the fundamental abstraction patterns that underlie other software patterns such as composition (also referred to as aggregation), mixins and aspects.

    一个更复杂,也可以体现用途的例子如下:

    interface I {
         void f();
         void g();
     }
     
     class A implements I {
         public void f() { System.out.println("A: doing f()"); }
         public void g() { System.out.println("A: doing g()"); }
     }
     
     class B implements I {
         public void f() { System.out.println("B: doing f()"); }
         public void g() { System.out.println("B: doing g()"); }
     }
     
     class C implements I {
         // delegation
         I i = new A();
     
         public void f() { i.f(); }
         public void g() { i.g(); }
     
         // normal attributes
         public void toA() { i = new A(); }
         public void toB() { i = new B(); }
     }
     
     
     public class Main {
         public static void main(String[] args) {
             C c = new C();
             c.f();     // output: A: doing f()
             c.g();     // output: A: doing g()
             c.toB();
             c.f();     // output: B: doing f()
             c.g();     // output: B: doing g()
         }
     }
     
    上述例子中,可以自由切换f及g的实现。
     
  • 相关阅读:
    tkinter gui界面使用调戏妹子
    @property 用法
    @classmehod 用法解析
    python psutil 使用和windows 10 设置
    python 类多重继承问题
    多线程同步引入锁
    Linux—禁止用户SSH登录方法总结
    Linux FTP的主动模式与被动模式
    Java Socket详解
    MySQL学习(一)——创建新用户、数据库、授权
  • 原文地址:https://www.cnblogs.com/justin_s/p/1898952.html
Copyright © 2011-2022 走看看