委托模式

2019-05-15  本文已影响0人  Lucksheep

一、委托模式简介

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

二、与代理模式的区别

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

三、与策略模式的区别

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

四、实战演练

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

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

package com.demo.delegate;
/**
 * 开发需求
 */
public interface DevelopmentNeeds {
    public void doing(String needsName);
}

  1. 实现改需求的两个苦逼的程序员 DevelopmentOne.java

package com.demo.delegate;

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

DevelopmentTwo .java


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

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

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

  1. DelegateTest.java

package com.demo.delegate;
public class DelegateTest {
    public static void main(String[] args) {
        new Director().doing("优惠券");
    }
}

总结

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

猜你喜欢

热点阅读