前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >[设计模式]委派模式「建议收藏」

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

作者头像
全栈程序员站长
发布2022-07-31 13:56:17
3500
发布2022-07-31 13:56:17
举报
文章被收录于专栏:全栈程序员必看

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

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

点我进入github

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

委派模式

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

与策略模式很相似.

拥有以下三种角色

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

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

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

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

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

代码实现
代码语言:javascript
复制
/**
 * 委派模式
 * @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.cn/128369.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年4月1,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 委派模式
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档