委派模式

概述

委派就像通过对象的组合手动完成的继承。
Delegation.jpg

它是一种技术,对于对象向外部表达确定的行为。但是实际上将该实现的行为责任委托给关联的对象。第一次听起来像代理模式,但是他的作用大不相同。委派是一种集中对象方法的行为的抽象机制。

使用场景

  • 你需要减少方法与其类的耦合。
  • 你有行为一样的组件,但是意识这种状态在未来可能改变。

一般来说,对于继承使用委派作为一种选择。继承是一个很好的策略,当在一个闭合的关系存在父与子之间,然而,继承一组非常紧密的对象是反对的。常常,为了表达类之间的关系,委派是很有弹性的方式。

这个模式也被称为"代理连",其他的几个模式也使用了委派,例如状态,策略,以及访问者模式。

简单的实例

delegation_advanced.jpg

public interface ISoundBehaviour {

        public void makeSound();
}

public class MeowSound implements ISoundBehaviour {

        public void makeSound() {
                System.out.println("Meow");
        }
}

public class RoarSound implements ISoundBehaviour {

        public void makeSound() {
                System.out.println("Roar!");
        }
}

Cat.java

public class Cat {  
  private ISoundBehaviour sound = new MeowSound();  

  public void makeSound() {  
    this.sound.makeSound();  
  }  

  public void setSoundBehaviour(ISoundBehaviour newsound) {  
        this.sound = newsound;  
  }  
}

使用

public class Main {
        public static void main(String args[]) {
                Cat c = new Cat();
                // Delegation
                c.makeSound();          // Output: Meow
                // now to change the sound it makes
                ISoundBehaviour newsound = new RoarSound();
                c.setSoundBehaviour(newsound);
                // Delegation           
                c.makeSound();          // Output: Roar!
        }
}

参考:
http://best-practice-software-engineering.ifs.tuwien.ac.at/patterns/delegation.html

仅有 1 条评论
  1. 6666666666 6666666666

    666666666666666666666666

添加新评论