[设计模式]委派模式「建议收藏」

github地址:https://github.com/1711680493点我进入github如需了解更多设计模式,请进入我的设计模式专栏委派模式委派模式不是23设计模式中的一种.与策略模式很相似.拥有以下三种角色抽象任务角色 委派者角色 具体任务角色委派模式,就是将任务发给委派者角色,委派者角色去委派具体任务角色委派模式对外隐藏了具体实现,仅将委派者角色暴露给外部委派模式和策略模式不同的是,委派者角色和具体任务角色都要继承/实现抽象任务角色Spring框架很

大家好,又见面了,我是你们的朋友全栈君。

github地址:https://github.com/1711680493

点我进入github

如需了解更多设计模式,请进入我的设计模式专栏


委派模式

委派模式不是23设计模式中的一种.

与策略模式很相似.

拥有以下三种角色

  1. 抽象任务角色
  2. 委派者角色
  3. 具体任务角色

委派模式,就是将任务发给委派者角色,委派者角色去委派具体任务角色

委派模式对外隐藏了具体实现,仅将委派者角色暴露给外部

委派模式和策略模式不同的是,委派者角色和具体任务角色都要继承/实现抽象任务角色

Spring框架很多地方用到了委派模式,例如 Dispatcher(转发)


代码实现


/**
 * 委派模式
 * @author Shendi <a href='tencent://AddContact/?fromId=45&fromSubId=1&subcmd=all&uin=1711680493'>QQ</a>
 * @version 1.0
 */
public class DelegatePattern {

	public static void main(String[] args) {
		DelegateAbstract p = new DelegatePlayer();
		p.exec("A");
		p.exec("B");
		p.exec("???");
	}
	
}

/**
 * 抽象任务角色
 * @author Shendi <a href='tencent://AddContact/?fromId=45&fromSubId=1&subcmd=all&uin=1711680493'>QQ</a>
 * @version 1.0
 */
interface DelegateAbstract {

	/**
	 * 执行对应任务.
	 * @author Shendi <a href='tencent://AddContact/?fromId=45&fromSubId=1&subcmd=all&uin=1711680493'>QQ</a>
	 * @param name 委派名
	 */
	void exec(String name);
	
}

/**
 * 委派者
 * @author Shendi <a href='tencent://AddContact/?fromId=45&fromSubId=1&subcmd=all&uin=1711680493'>QQ</a>
 * @version 1.0
 */
class DelegatePlayer implements DelegateAbstract {

	@Override
	public void exec(String name) {
		
		// 将请求委派给别人
		// 这里使用HashMap,在被创建的时候进行初始化
		DelegateAbstract d = null;
		if ("A".equals(name)) {
			d = new DelegateA();
		} else if ("B".equals(name)) {
			d = new DelegateB();
		} else {
			System.out.println("我是委派者,没有此任务角色: " + name);
		}
		if (d != null) d.exec(name);
	}
	
}

/**
 * 具体任务角色A
 * @author Shendi <a href='tencent://AddContact/?fromId=45&fromSubId=1&subcmd=all&uin=1711680493'>QQ</a>
 * @version 1.0
 */
class DelegateA implements DelegateAbstract {

	@Override
	public void exec(String name) {
		System.out.println("我是任务A");
	}
	
}

/**
 * 具体任务角色B
 * @author Shendi <a href='tencent://AddContact/?fromId=45&fromSubId=1&subcmd=all&uin=1711680493'>QQ</a>
 * @version 1.0
 */
class DelegateB implements DelegateAbstract {

	@Override
	public void exec(String name) {
		System.out.println("我是任务B");
	}
	
}

运行结果如下

[设计模式]委派模式「建议收藏」

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/128369.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 深入理解设计模式之建造者模式

    深入理解设计模式之建造者模式老大突然拉住我,喜滋滋地告诉我:“公司很满意我们做的模型,又签订了一个合同,把奔驰、宝马的车辆模型都交给我们公司制作了,不过这次额外增加了一个新需求:汽车的启动、停止、喇叭声音、引擎声音都由客户自己控制,想什么顺序就什么顺序”那我们开始设计,来看一下类图:类图比较简单,在CarModel中我们定义了一个setSequence方法,车辆模型的这几个动作要如何排布,是在这个ArrayList中定义的。然后run()方法根据sequence定义的顺序完成指定的顺序动作。我们来看模型抽象类代码:

    2025年6月25日
    8
  • Android 设计模式Template Method模式

    Android 设计模式Template Method模式

    2022年1月8日
    50
  • 抽象工厂设计模式例题_什么是抽象工厂模式

    抽象工厂设计模式例题_什么是抽象工厂模式定义:为创建一组相关或相互依赖的对象提供一个接口,而且无需指定他们的具体类。类型:创建类模式类图:抽象工厂模式与工厂方法模式的区别       抽象工厂模式是工厂方法模式的升级版本,他用来创建一组相关或者相互依赖的对象。他与工厂方法模式的区别就在于,工厂方法模式针对的是一个产品等级结构;而抽象工厂模式则是针对的多个产品等级结构。在编程中,通常一个产品结构,表现为一个接口或者抽

    2025年7月3日
    5
  • Java设计模式之迭代子模式

    本文继续介绍23种设计模式系列之观察者模式。定义在软件构建过程中,集合对象内部结构常常变化各异,但对于这些集合对象,我们希望在不暴露其内部结构的同时,可以让外部客户代码透明地访问其中包含的元素;同时这种“透明遍历”也为同一种算法在多种集合对象上进行操作提供了可能。使用面向对象技术将这种遍历机制抽象为“迭代器对象”为“应对变化中的集合对象”提供了一种优雅的方式。迭代子(Iterator)模式又叫游标

    2022年3月11日
    37
  • 设计模式之6大原则(6)开闭原则

    设计模式之6大原则(6)开闭原则

    2021年11月15日
    67
  • java设计模式3,里氏替换原则

    java设计模式3,里氏替换原则里氏替换原则的内容可以描述为:“派生类(子类)对象可以在程序中代替其基类(超类)对象。”

    2025年7月3日
    6

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号