java设计模式-委派模式
时间:2019-10-17
本文章向大家介绍java设计模式-委派模式,主要包括java设计模式-委派模式使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
导读:
委派模式不属于23种设计模式,在平常其他设计模式中可能也有体现。同样在现实生活中也有相关的体现,比如一个具体任务的执行,首先是经过高层领导讨论,将具体的任务委派给相关部门经理,部门经理拿到任务通知后去委派相关的员工具体执行任务,委派任务的角色实际并非具体执行任务,而是对任务分发,执行过程进行管理。
参考类图:
代码:
1.抽象的服务类接口,提供执行任务的方法
1 //公共的服务接口 2 public interface BaseService { 3 // 执行命令的方法 4 void execute(); 5 }
2.具体的服务类,执行相应的任务
1 //后台代码 2 public class CodeService implements BaseService { 3 4 @Override 5 public void execute() { 6 System.out.println("执行后台代码开发任务"); 7 } 8 9 }
1 //前台页面 2 public class FrontService implements BaseService { 3 4 @Override 5 public void execute() { 6 System.out.println("执行前端页面设计任务"); 7 } 8 9 }
3.委派者角色,负责委派,分发任务,最后提交执行的结果
1 //委派任务角色 2 public class Delegator { 3 // 用一个容器存放不同的子任务对应的执行对象 4 Map<String, BaseService> map = new HashMap<>(); 5 6 // 任务的委派,分发 7 private BaseService delegate(String msg) { 8 map.put("前端", new FrontService()); 9 map.put("后台", new CodeService()); 10 if ("后台".equals(msg)) { 11 return map.get(msg); 12 } else if ("前端".equals(msg)) { 13 return map.get(msg); 14 } 15 System.out.println("委派任务出错!"); 16 return null; 17 } 18 19 // 任务具体的执行 20 public void execute(String msg) { 21 if (delegate(msg)!=null) { 22 delegate(msg).execute(); 23 } 24 } 25 26 }
4.客户端类
1 //客户端 ->委派任务 2 public class Client { 3 4 public static void main(String[] args) { 5 6 String command1 = "前端"; 7 String command2 = "后台"; 8 Delegator delegator = new Delegator(); 9 delegator.execute(command1); 10 delegator.execute(command2); 11 delegator.execute("test"); 12 13 } 14 15 }
效果截图:
优缺点:
优点:通过任务委派能够将一个大型的任务细化,然后通过统一管理这些子任务的完成情况实现任务的跟进,能够加快任务执行的效率。
缺点:任务委派方式需要根据任务的复杂程度进行不同的改变,在任务比较复杂的情况下可能需要进行多重委派,容易造成紊乱。
适用场景:
1. spring mvc中核心控制器DispatcherServlet的执行流程。
2.需要对一个比较复杂的任务进行分解,分发执行并通过一个委派者角色将最终结果返回。
文章待完善。
原文地址:https://www.cnblogs.com/weekstart/p/delegate.html
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- Python数据分析之Seaborn(热图绘制)
- Python数据分析之matplotlib(3D绘图)
- 一看就懂的Tensorflow实战(Tensorflow入门)
- 一看就懂的Tensorflow实战(线性回归模型)
- 一看就懂的Tensorflow实战(Logistic回归模型)
- 一看就懂的Tensorflow实战(Logistic回归模型Eager API)
- 聊聊dubbo-go的DubboProtocol
- 一看就懂的Tensorflow实战(最近邻)
- 一看就懂的Tensorflow实战(随机森林)
- 一看就懂的Tensorflow实战(多层感知机)
- 一看就懂的Tensorflow实战(卷积神经网络)
- 一看就懂的Tensorflow实战(多层感知机模型Eager API)
- 一看就懂的Tensorflow实战(K-Means模型)
- 一看就懂的Tensorflow实战(模型的保存与读取)
- 知识卡片 文本分词