委派模式与模板模式(3)

简介: 委派模式与模板模式(3)

OrderController 类 :


public class OrderController {
    public void getOrderById(String mid) {
    }
}


SystemController 类:


public class SystemController {
    public void logout() {
    }
}


创建 DispatcherServlet 类:


public class DispatcherServlet extends HttpServlet {
    private Map<String, Method> handlerMapping = new HashMap<String, Method>();
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doDispatch(req, resp);
    }
    private void doDispatch(HttpServletRequest req, HttpServletResponse resp) {
        String url = req.getRequestURI();
        Method method = handlerMapping.get(url);
        // method.invoke();
    }
    @Override
    public void init() throws ServletException {
        try {
            handlerMapping.put("/web/getMemeberById.json", MemberController.class.getMethod("getMemberById", String.class));
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}


配置 web.xml 文件 :


<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xmlns="http://java.sun.com/xml/ns/j2ee"
         xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
         version="2.4">
    <display-name>Gupao Web Application</display-name>
    <servlet>
        <servlet-name>delegateServlet</servlet-name>
        <servlet-class>com.gupaoedu.vip.pattern.delegate.mvc.DispatcherServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>delegateServlet</servlet-name>
        <url-pattern>/*</url-pattern>
    </servlet-mapping>
</web-app>


一个完整的委派模式就实现出来了。当然,在 Spring 中运用到委派模式不仅千此,还有很多。小伙伴们可以通过命名就可以识别。在 Spring 源码中 , 只要以 Delegate 结尾的都是实现了委派模式。例

如: BeanDefinitionParserDelegate 根据不同类型委派不同的逻辑解析 BeanDefinition。


四、委派模式的优缺点

优点:


通过任务委派能够将—个大型的任务细化,然后通过统—管理这些子任务的完成情况实现任务的跟进,能够加快任务执行的效率。

缺点:


任务委派方式需要根据任务的复杂程度进行不同的改变,在任务比较复杂的情况下可能需要进行多

重委派,容易造成索乱。

五、模板模式 定义

模板模式 ( Template Method Pattern) 又叫模板方法模式,是指定义一个操作中的算法的框架,而将一些步骤延迟到子类中。使得子类可以不沈变一个算法的结构即可重定义该算法的某些特定步骤,属于行为型设计模式。


模板方法模式实际上是封装了一个固定流程,该流程由几个步骤组成,具体步骤可以由子类进行不同实现,从而让固定的流程产生不同的结果。它非第简单, 其实就是类的继承机制,但它却是一个应用非常广泛的模式。模板方法模式的本质是抽象封装流程,具体进行实现。


应用场景:

当完成一个操作具有固定的流程时 , 由抽象固定流程步骤 , 具体步骤交给子类进行具体实现(固定的流程 , 不同的实现 ) 。


在我们日室生活中模板方法模式也很室见。 比如我们平时办理入职流程填写入职登记表一打印简历一复印学历一复印身份证一签订劳动合同一建立花名册一办理工牌一安排工位等;再比如 , 我平时在家里炒菜:洗锅一点火 一热锅一上油一下原料一翻炒 一放调料一出锅;再

比如有个小品 , 赵本山问宋丹丹: “如何把大象放进冰箱? ” 宋丹丹回答: “第—步:打开冰箱门, 第二步:把大象哀进冰箱 , 第三步:关闭冰箱门” 。赵本山再问: “怎么把长劲鹿放进冰箱? ” 宋f]f]答:“第—步:打开冰箱门, 第二步:把大象拿出来 , 第三步:把长劲鹿哀进去 , 第四步:关闭冰箱门” (如下图所示 ), 这些都是模板方法模式的体现。


image.png


微信图片_20220129153323.png


模板方法中的钩子方法

我们还是以大学校园的课程创建流程为例:发布预习资料→ 制作课件 PPT → 在线直播→ 提交

课堂笔记→ 提交源码→ 布置作业→ 检查作业。 首先我们来创建 AbastractCourse 抽象类:


public abstract class AbastractCourse {
    public final void createCourse(){
        //1、发布预习资料
        postPreResoucse();
        //2、制作课件
        createPPT();
        //3、直播授课
        liveVideo();
        //4、上传课后资料
        postResource();
        //5、布置作业
        postHomework();
        if(needCheckHomework()){
            checkHomework();
        }
    }
    protected abstract void checkHomework();
    //钩子方法
    protected boolean needCheckHomework(){return  false;}
    protected void postHomework(){
        System.out.println("布置作业");
    }
    protected void postResource(){
        System.out.println("上传课后资料");
    }
    protected void liveVideo(){
        System.out.println("直播授课");
    }
    protected void createPPT(){
        System.out.println("制作课件");
    }
    protected void postPreResoucse(){
        System.out.println("发布预习资料");
    }
}
目录
相关文章
|
机器学习/深度学习 存储 人工智能
大数据和人工智能工程上的一些点
大数据 大数据这个词最早出现在上世纪90年代的美国,直到2012年后才火起来。大数据没有一个明确的概念,之所以称之为大是因为数据量太大超过了单台计算机的资源,这时就需要分布式的数据处理工具,以便能在用户可容忍的时间内进行数据处理。大数据从业人员肯定会去了解谷歌的mapreduce论文和hadoop开源工具。然而海量数据本来是静态,只有通过对数据进行分析和利用才能让数据产生价值。正所谓量变产生质变。 人工智能 人工智能在1956年的达特茅斯会议上被提出来,它研究的是如何制造智能机器或模拟人类的智能行为。大数据与人工智能之间可以说是相辅相成,人工智能的基础是数据,而数据的利用又离不开人工智能。各
186 0
|
1天前
|
存储 机器学习/深度学习 人工智能
打破硬件壁垒!煎饺App:强悍AI语音工具,为何是豆包AI手机平替?
直接上干货!3000 字以上长文,细节拉满,把核心功能、使用技巧和实测结论全给大家摆明白,读完你就知道这款 “安卓机通用 AI 语音工具"——煎饺App它为何能打破硬件壁垒?它接下来,咱们就深度拆解煎饺 App—— 先给大家扒清楚它的使用逻辑,附上“操作演示”和“🚀快速上手不踩坑 : 4 条核心操作干货(必看)”,跟着走零基础也能快速上手;后续再用真实实测数据,正面硬刚煎饺 App的语音助手口令效果——创建京东「牛奶自动下单神器」口令 ,从修改口令、识别准确率到场景实用性,逐一测试不掺水,最后,再和豆包 AI 手机语音助手的普通版——豆包App对比测试下,简单地谈谈煎饺App的能力边界在哪?
|
3天前
|
云安全 监控 安全
|
8天前
|
机器学习/深度学习 人工智能 自然语言处理
Z-Image:冲击体验上限的下一代图像生成模型
通义实验室推出全新文生图模型Z-Image,以6B参数实现“快、稳、轻、准”突破。Turbo版本仅需8步亚秒级生成,支持16GB显存设备,中英双语理解与文字渲染尤为出色,真实感和美学表现媲美国际顶尖模型,被誉为“最值得关注的开源生图模型之一”。
1059 5
|
10天前
|
机器学习/深度学习 人工智能 数据可视化
1秒生图!6B参数如何“以小博大”生成超真实图像?
Z-Image是6B参数开源图像生成模型,仅需16GB显存即可生成媲美百亿级模型的超真实图像,支持中英双语文本渲染与智能编辑,登顶Hugging Face趋势榜,首日下载破50万。
710 42
|
14天前
|
人工智能 Java API
Java 正式进入 Agentic AI 时代:Spring AI Alibaba 1.1 发布背后的技术演进
Spring AI Alibaba 1.1 正式发布,提供极简方式构建企业级AI智能体。基于ReactAgent核心,支持多智能体协作、上下文工程与生产级管控,助力开发者快速打造可靠、可扩展的智能应用。
1142 41
|
14天前
|
人工智能 前端开发 算法
大厂CIO独家分享:AI如何重塑开发者未来十年
在 AI 时代,若你还在紧盯代码量、执着于全栈工程师的招聘,或者仅凭技术贡献率来评判价值,执着于业务提效的比例而忽略产研价值,你很可能已经被所谓的“常识”困住了脚步。
877 72
大厂CIO独家分享:AI如何重塑开发者未来十年
|
10天前
|
存储 自然语言处理 测试技术
一行代码,让 Elasticsearch 集群瞬间雪崩——5000W 数据压测下的性能避坑全攻略
本文深入剖析 Elasticsearch 中模糊查询的三大陷阱及性能优化方案。通过5000 万级数据量下做了高压测试,用真实数据复刻事故现场,助力开发者规避“查询雪崩”,为您的业务保驾护航。
527 31
|
17天前
|
数据采集 人工智能 自然语言处理
Meta SAM3开源:让图像分割,听懂你的话
Meta发布并开源SAM 3,首个支持文本或视觉提示的统一图像视频分割模型,可精准分割“红色条纹伞”等开放词汇概念,覆盖400万独特概念,性能达人类水平75%–80%,推动视觉分割新突破。
977 59
Meta SAM3开源:让图像分割,听懂你的话