模版方法

昨天在一位读者对我的博客评论中,指出了我写的不合适的地方,也有一些知识我不太了解,所以今天来学设计模式之模版方法

早上刚到工位,很有干劲🙌🙌🙌

先学概念

先看概念:模板方法设计模式是一种行为设计模式,它允许我们创建一个方法框架,并将实现的一些步骤推迟到子类中

说人话😭:就是我们想要创建一个东西,我们先定义一个抽象类,里面包含了一个模版方法和一些抽象方法,这个模版方法是通用的,然后子类来继承抽象类,覆盖抽象方法,来达到不同的模版实现,有点绕,但是看例子很简单

这种设计模式在Java中的应用非常广泛,例如在java.io.InputStream、java.io.OutputStream、java.io.Reader和java.io.Writer等类中,以及在java.util.AbstractList、java.util.AbstractSet和java.util.AbstractMap等类中都使用了模板方法设计模式

直接实践👌

比如我们想要一个计算机时,按照上面的步骤,先写一个抽象类,里面包含了一个模版方法,这个模版方法对于所有子类应该是通用的,比如我们想要使用不同的材料构建不同的计算机,很好,先写抽象类:

csharp 复制代码
 // Abstract class defining the template method
 public abstract class ComputerBuilder {
 ​
     // Template method
     public final Computer buildComputer() {
         addMotherboard();
         setupMotherboard();
         addProcessor();
         return new Computer();
     }
 ​
     // Abstract methods to be implemented by subclasses
     public abstract void addMotherboard();
     public abstract void setupMotherboard();
     public abstract void addProcessor();
 }

很简单,说一下😎:就是里面有一个构建计算机的模版方法,然后有几个抽象类,为了让子类有不同的覆盖

说到子类覆盖了,直接来两个子类吧:

比如子类标准计算机😊:

less 复制代码
 // Concrete subclass representing the process of building a standard computer
 public class StandardComputerBuilder extends ComputerBuilder {
 ​
     @Override
     public void addMotherboard() {
         // Add standard motherboard
     }
 ​
     @Override
     public void setupMotherboard() {
         // Setup standard motherboard
     }
 ​
     @Override
     public void addProcessor() {
         // Add standard processor
     }
 }

想要子类高端计算机!!!

less 复制代码
 // Concrete subclass representing the process of building a high-end computer
 public class HighEndComputerBuilder extends ComputerBuilder {
 ​
     @Override
     public void addMotherboard() {
         // Add high-end motherboard
     }
 ​
     @Override
     public void setupMotherboard() {
         // Setup high-end motherboard
     }
 ​
     @Override
     public void addProcessor() {
         // Add high-end processor
     }
 }

测试,我想要一个标准计算机,怎么办:

很简单,直接用😁:

ini 复制代码
 StandardComputerBuilder standardComputerBuilder = new StandardComputerBuilder();
 Computer standardComputer = standardComputerBuilder.buildComputer();

总结

到这里就结束了,很短,很快,知识点也很简单,就是进行了一层抽象

但是是程序员必知的,哈哈哈💕💕💕

相关推荐
大菠萝学姐几秒前
基于springboot的旅游攻略网站设计与实现
前端·javascript·vue.js·spring boot·后端·spring·旅游
回家路上绕了弯15 分钟前
服务器大量请求超时?从网络到代码的全链路排查指南
分布式·后端
SimonKing36 分钟前
SpringBoot邮件发送怎么玩?比官方自带的Mail更好用的三方工具
java·后端·程序员
武子康39 分钟前
大数据-150 Apache Druid 单机部署实战:架构速览、启动清单与故障速修
大数据·后端·apache
IT_陈寒41 分钟前
Redis 高并发实战:我从 5000QPS 优化到 5W+ 的7个核心策略
前端·人工智能·后端
songroom1 小时前
Rust: 量化策略回测与简易线程池构建、子线程执行观测
开发语言·后端·rust
绝无仅有1 小时前
某东电商平台的MySQL面试知识点分析
后端·面试·架构
Apifox1 小时前
如何在 Apifox 中使用「模块」合理地组织接口
前端·后端·测试
q_19132846951 小时前
基于SpringBoot+Vue2的美食菜谱美食分享平台
java·spring boot·后端·计算机·毕业设计·美食
bcbnb1 小时前
iOS 抓包工具有哪些,工具矩阵、职责分工与工程化选型建议
后端