设计模式-委托模式

 
  • 文章目录
    • 一、委托模式简介;
    • 二、与代理模式的区别;
    • 三、与策略模式的区别;
    • 四、实战演练;

一、委托模式简介

  1. (注:)不属于 23 种设计模式之一,是面向对象设计模式中常用的一种模式。
  2. 特点:持有被委托人的引用,不关心过程,只关心结果。
  3. 归类:行为型模式
  4. 核心:可以理解为静态代理和策略模式一种特殊的组合。

二、与代理模式的区别

  1. 代理模式:注重过程
  2. 委托模式:注重结果

三、与策略模式的区别

  1. 注重的外部扩展
  2. 注重的是内部的灵活和复用

四、实战演练

demo事例:老板给经理安排了A需求,经理接了,然后安排给程序员1去开发;

  1. 开发需求的接口 DevelopmentNeeds.java

    1
    2
    3
    4
    5
    6
    7
    8
    9
    package com.demo.delegate;

    /**
    * 开发需求
    */
    public interface DevelopmentNeeds {

    public void doing(String needsName);
    }
  2. 实现改需求的两个苦逼的程序员 DevelopmentOne.java

    1
    2
    3
    4
    5
    6
    7
    8
    package com.demo.delegate;

    public class DevelopmentOne implements DevelopmentNeeds{
    @Override
    public void doing(String needsName) {
    System.out.println("我是程序员1号,我在苦逼的开发:"+needsName+"需求");
    }
    }

DevelopmentTwo .java

1
2
3
4
5
6
7
8
package com.demo.delegate;

public class DevelopmentTwo implements DevelopmentNeeds{
@Override
public void doing(String needsName) {
System.out.println("我是程序员2号,我在苦逼的开发:"+needsName+"需求");
}
}

  1. 根据功能安排某个程序员做事情的经理 Director .java

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    package com.demo.delegate;

    import java.util.HashMap;
    import java.util.Map;

    /**
    * 经理
    */
    public class Director implements DevelopmentNeeds{

    private Map<String,DevelopmentNeeds> needs = new HashMap<String,DevelopmentNeeds>();

    public Director() {
    needs.put("洗车",new DevelopmentOne());
    needs.put("优惠券",new DevelopmentTwo());
    }

    @Override
    public void doing(String needsName) {
    needs.get(needsName).doing(needsName);
    }
    }
  2. DelegateTest.java

    1
    2
    3
    4
    5
    6
    7
    8
    package com.demo.delegate;

    public class DelegateTest {

    public static void main(String[] args) {
    new Director().doing("优惠券");
    }
    }

总结:

  1. 功劳是经理的,具体做事的是程序员的

 评论