首页
统计
关于
Search
1
Sealos3.0离线部署K8s集群
1,110 阅读
2
类的加载
754 阅读
3
Spring Cloud OAuth2.0
735 阅读
4
SpringBoot自动装配原理
698 阅读
5
集合不安全问题
594 阅读
笔记
Java
多线程
注解和反射
JVM
JUC
设计模式
Mybatis
Spring
SpringMVC
SpringBoot
MyBatis-Plus
Elastic Search
微服务
Dubbo
Zookeeper
SpringCloud
Nacos
Sentinel
数据库
MySQL
Oracle
PostgreSQL
Redis
MongoDB
工作流
Activiti7
Camunda
消息队列
RabbitMQ
前端
HTML5
CSS
CSS3
JavaScript
jQuery
Vue2
Vue3
Linux
容器
Docker
Kubernetes
Python
FastApi
登录
Search
标签搜索
Java
CSS
mysql
RabbitMQ
JavaScript
Redis
JVM
Mybatis-Plus
Camunda
多线程
CSS3
Python
Spring Cloud
注解和反射
Activiti
工作流
SpringBoot
Mybatis
Spring
html5
蘇阿細
相聚有时,后会无期
累计撰写
392
篇文章
累计收到
4
条评论
首页
栏目
笔记
Java
多线程
注解和反射
JVM
JUC
设计模式
Mybatis
Spring
SpringMVC
SpringBoot
MyBatis-Plus
Elastic Search
微服务
Dubbo
Zookeeper
SpringCloud
Nacos
Sentinel
数据库
MySQL
Oracle
PostgreSQL
Redis
MongoDB
工作流
Activiti7
Camunda
消息队列
RabbitMQ
前端
HTML5
CSS
CSS3
JavaScript
jQuery
Vue2
Vue3
Linux
容器
Docker
Kubernetes
Python
FastApi
页面
统计
关于
搜索到
1
篇与
的结果
2022-09-16
行为型模式-模板方法
行为型模式用于描述程序在运行时复杂的流程控制,即描述多个类或对象之间怎样相互协作共同完成单个对象无法单独完成的任务,涉及算法和对象间职责的分配分为:模板方法、策略模式、命令模式、责任链模式、状态模式、观察者模式、中介者模式、迭代器模式、访问者模式、备忘录模式、解释器模式;其中模板方法、解释器模式属于类行为模式,其他属于对象行为模式模板方法(1)概述定义一个操作中的算法骨架,并将其中的一些步骤延迟到子类中执行,使得子类可以在不改变主干步骤的情况下重定义该算法的某些特定步骤(2)结构抽象类:负责给出一个算法的轮廓和骨架,由一个模板方法和若干个基本方法构成模板方法:定义算法的骨架,按指定的顺序调用其包含的基本方法基本方法:实现算法的各个步骤(模板方法的组成部分)抽象方法:由抽象类声明,由其具体子类实现具体方法:由抽象类或具体类声明并实现,其子类可以进行覆盖也可以直接继承钩子方法:在抽象类中已实现,包括用于判断的逻辑方法和需要子类重写的空方法两个部分具体子类:实现抽象类中定义的抽象方法和钩子方法钩子方法一般是用于做判断的逻辑方法,类名为 isXXX,返回值类型为 boolean(3)案例以炒菜为例抽象类public abstract class AbstractClass { /** * 模板方法 */ public final void cookProcess() { pourOil(); heatOil(); pourVegetable(); pourSauce(); fry(); } public void pourOil() { System.out.println("倒油"); } public void heatOil() { System.out.println("热油"); } /** * 倒蔬菜 */ public abstract void pourVegetable(); /** * 放调料 */ public abstract void pourSauce(); public void fry() { System.out.println("准备完毕,开始炒菜"); } }具体类public class ConcreteClass_BaoCai extends AbstractClass { @Override public void pourVegetable() { System.out.println("放入包菜"); } @Override public void pourSauce() { System.out.println("放入辣椒"); } } public class ConcreteClass_CaiXin extends AbstractClass { @Override public void pourVegetable() { System.out.println("放入菜心"); } @Override public void pourSauce() { System.out.println("放入蒜瓣"); } }Clientpublic class Client { public static void main(String[] args) { //炒包菜 ConcreteClass_BaoCai baoCai = new ConcreteClass_BaoCai(); baoCai.cookProcess(); } }(4)优缺点代码复用,相同的代码可以放到抽象父类中,不同的代码放在对应的子类中实现了反向控制,通过父类调用其子类的操作,并通过子类的不同实现扩展不同的行为,复合开闭原则对每个不同的实现都需要定义一个子类,导致类的个数及系统设计难度的增加反向控制降低了代码的易读性(5)使用场景算法的整体步骤固定,但其中的个别部分易变时,使用模板方法可将易变的部分抽象出来,由其子类实现需要通过子类决定父类中的某个步骤是否执行,实现子类对父类的反向控制
2022年09月16日
46 阅读
0 评论
0 点赞