Java编程--委派设计模式
委派设计模式
委派 (Delegation)
委派(Delegation)是一种设计模式,通常用于实现代码的解耦和复用。简单来说,委派是指一个对象将自己的部分职责,即一些特定的任务,转交(委派)给其他对象来处理。这种模式允许对象组合实现功能,而不是通过继承。
委派模式的关键特征:
- 封装行为:委派对象持有对另一对象的引用,这个被引用的对象提供了特定的服务或行为。
- 解耦:通过委派,一个类不需要实现所有功能,而是可以利用其他对象的功能。这有助于减少类之间的依赖关系。
- 复用:委派可以在多个不同的类中重用同一个对象,实现代码的复用。
举个例子:
假设有一个打印任务类 PrintTask,它可以把打印的细节(例如打印到控制台或文件)委派给另一个类 Printer。PrintTask 只需要告诉 Printer 需要打印什么,而不必关心打印是如何实现的。
负责打印的任务类,负责把打印的细节委派给具体的PrinterInterface的打印接口。
@Data
@AllArgsConstructor
@NoArgsConstructor
public class PrintTask {
private PrinterInterface printer;
public void executePrint(String message) {
printer.print(message);
}
}
打印接口,定义打印要执行的方法
/**
* 打印接口
*/
public interface PrinterInterface {
void print(String message);
}
打印接口实现,打印到控制台
/**
* 控制台打印器
*/
public class ConsolePrinter implements PrinterInterface {
@Override
public void print(String message) {
System.out.println("Printing to console: " + message);
}
}
打印接口实现,打印到文件
/**
* 文件打印器
*/
public class FilePrinter implements PrinterInterface {
private String filePath;
public FilePrinter(String filePath) {
this.filePath = filePath;
}
@Override
public void print(String message) {
try (BufferedWriter writer = new BufferedWriter(new FileWriter(filePath, true))) {
writer.write(message);
writer.newLine();
} catch (IOException e) {
e.printStackTrace();
}
}
}
客户端调用,决定由哪个接口去打印
public class DelegationDemo {
public static void main(String[] args) {
PrinterInterface consolePrinter = new ConsolePrinter();
PrinterInterface filePrinter = new FilePrinter("output.txt");
PrintTask printTask = new PrintTask();
// 委派给控制台打印器去执行
printTask.setPrinter(consolePrinter);
printTask.executePrint("Hello, printing to console!");
// 委派给文件打印器去执行
printTask.setPrinter(filePrinter);
printTask.executePrint("Hello, printing to file!");
}
}
委派和继承的对比:
- 继承:是一种“是一个”(is-a)关系,子类继承父类的属性和方法。
- 委派:则更多体现为“有一个”(has-a)关系,委派类通过持有另一个类的实例来利用其功能。
委派模式在许多现代编程语言和框架中都有广泛应用,它有助于创建松耦合、易于维护和扩展的代码结构。
链接:
https://www.cnblogs.com/zjw-blog/p/17915298.html
Java编程--委派设计模式的更多相关文章
- 【Todo】【读书笔记】Java多线程编程指南-设计模式篇
下了这本书<Java多线程编程指南-设计模式篇>, 还有另一本<JAVA多线程设计模式>,据说内容有重复,结合着看.
- Java编程的逻辑 (54) - 剖析Collections - 设计模式
本系列文章经补充和完善,已修订整理成书<Java编程的逻辑>,由机械工业出版社华章分社出版,于2018年1月上市热销,读者好评如潮!各大网店和书店有售,欢迎购买,京东自营链接:http:/ ...
- Java编程的逻辑 (87) - 类加载机制
本系列文章经补充和完善,已修订整理成书<Java编程的逻辑>,由机械工业出版社华章分社出版,于2018年1月上市热销,读者好评如潮!各大网店和书店有售,欢迎购买,京东自营链接:http:/ ...
- Java编程思想重点笔记(Java开发必看)
Java编程思想重点笔记(Java开发必看) Java编程思想,Java学习必读经典,不管是初学者还是大牛都值得一读,这里总结书中的重点知识,这些知识不仅经常出现在各大知名公司的笔试面试过程中,而 ...
- Java编程思想学习(八) 内部类
可以将一个类的定义放在另一个类的定义内部,这就是内部类. 内部类的定义是简单的,但是它的语法确实很是复杂,让人不是很好理解.下面就内部类做一个小结. 一.内部类的分类 总的来讲内部类分为普通内部类,匿 ...
- java编程思想
Java编程思想,Java学习必读经典,不管是初学者还是大牛都值得一读,这里总结书中的重点知识,这些知识不仅经常出现在各大知名公司的笔试面试过程中,而且在大型项目开发中也是常用的知识,既有简单的概念理 ...
- 完成《Java编程入门》初稿
Java编程入门 现在的运维工程师不但要懂得集合网络.系统管理而且要和开发人员一起调试系统,社会上也需要"复合性"的运维人员,所以需要做运维的也要懂一些开发,知道软件系统接口的调试 ...
- Java中单态设计模式
Java中单态设计模式 2011-09-23 16:38:46| 分类: Java | 标签:technology! |举报|字号 订阅 此博文是转自新浪博客中一名叫做"俊俊的 ...
- Java编程思想总结笔记The first chapter
总觉得书中太啰嗦,看完总结后方便日后回忆,本想偷懒网上找别人的总结,无奈找不到好的,只好自食其力,尽量总结得最好. 第一章 对象导论 看到对象导论觉得这本书 目录: 1.1 抽象过程1.2 每个对象 ...
- Java 编程思想 Chapter_14 类型信息
本章内容绕不开一个名词:RTTI(Run-time Type Identification) 运行时期的类型识别 知乎上有人推断作者是从C++中引入这个概念的,反正也无所谓,理解并能串联本章知识才是最 ...
随机推荐
- RabbitMQ(五)——发布订阅模式
RabbitMQ系列 RabbitMQ(一)--简介 RabbitMQ(二)--模式类型 RabbitMQ(三)--简单模式 RabbitMQ(四)--工作队列模式 RabbitMQ(五)--发布订阅 ...
- What?废柴, 还在本地部署DeepSeek吗?Are you kidding?
前言 DeepSeek推出更强大的推理模型DeepSeek R1后一发不可收拾,迅速火遍全球,用户暴增,但巨大的流量以及一些不可控因素,DeepSeek官网变得极不稳定,经常出现"网络繁忙& ...
- C++ 创建进程的方法
1. C++中创建进程的代码示例: // ProcessDemo.cpp : 此文件包含 "main" 函数.程序执行将在此处开始并结束. // #include<windo ...
- startup_stm32f10x_xx.s 启动代码文件的选择
网上查到的各个文件的解释是: startup_stm32f10x_cl.s 互联型的器件startup_stm32f10x_hd.s 大容量startup_stm32f10x_hd_vl.s 大容量s ...
- Vue3响应式编程三剑客:计算属性、方法与侦听器深度实战指南
在Vue3开发中,计算属性.方法和侦听器是处理数据逻辑的核心工具.它们各自有不同的作用和适用场景,合理使用这些工具可以显著提升代码的可读性和性能.本篇将深入探讨这三者的定义.使用场景以及实际案例,并通 ...
- typecho引入五秒盾,缓解服务器压力
功能是:对访客的访问频率会先一步判断,根据用户自定义的范围,将频率过高的访客跳转向127.0.0.1,而没有达到频率的访客则会进行cookies验证,这样更大程序的对恶意流量攻击进行拦截,并且有效缓解 ...
- Hive - 多种表类型的CURD测试
关于torc.textfile.orc.es.hyperdrive表的CURD测试 TORC(支持事务的orc表)测试 TORC(分区表)测试 TEXTFILE 表测试 ORC 表测试 ES(Elas ...
- 基于Potplayer类播放器或Action!类录屏软件调取摄像头方式的定时抓拍保存图像方法小结
前面已经总结了基于Maxmspjitter的相关方法,还有基于Unity的,还有基于Openframeworks的,今天来一篇基于普通软件的: 1.专业播放器类的软件,如Potplayer.vlc.o ...
- 读论文-基于Python的协同过滤算法的研究与应用实现
前言 今天读的论文为一篇名为<基于Python的协同过滤算法的研究与应用实现>的论文,文章是在2019年9月发表于<电脑知识与技术>的一篇期刊论文. 摘要 随着科学技术的快速发 ...
- JdbcTemplate 自定义返回的结果集字段和实体类映射
废话不多:抄袭代码 package com.webank.wedatasphere.qualitis.handler; import com.webank.wedatasphere.qualitis. ...