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

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

运行结果如下

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

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

发表回复

您的电子邮箱地址不会被公开。

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