2025年4月2日 星期三 乙巳(蛇)年 正月初三 设为首页 加入收藏
rss
您当前的位置:首页 > 计算机 > 编程开发 > 设计模式

委托模式

时间:02-23来源:作者:点击数:72

委托模式是软件设计模式中的一项基本技巧。在委托模式中,有两个对象参与处理同一个请求,接受请求的对象将请求委托给另一个对象来处理。委托模式是一项基本技巧,许多其他的模式,如状态模式、策略模式、访问者模式本质上是在更特殊的场合采用了委托模式。委托模式使得我们可以用聚合来替代继承,它还使我们可以模拟mixin。

简单的Java例子

在这个例子里,类模拟打印机Printer拥有针式打印机RealPrinter的实例,Printer拥有的方法print()将处理转交给RealPrinter的方法print()。

  • 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();
  • }
  • }

复杂的Java例子

通过使用接口,委托可以做到类型安全并且更加灵活。在这个例子里,类别C可以委托类别A或类别B,类别C拥有方法使自己可以在类别A或类别B间选择。因为类别A或类别B必须实现接口I规定的方法,所以在这里委托是类型安全的。这个例子显示出委托的缺点是需要更多的代码。

  • 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()
  • }
  • }
方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门