实际案例演示:从理论到实践,如何落地应用设计模式

大家在学习设计模式应该都会有个疑问,学完了。到底项目上怎么来用呢,好像没有思路。如果你也有这个疑问可以试试用chatgpt辅助你。不仅给了说明,还会给你提供代码demo,可以打开自己的思路。

以下就是详细的结果:

在开发Java版电子签章项目中,我们可以使用多种设计模式来提高代码的可维护性、可扩展性和可重用性。下面是几个常见的设计模式及其在电子签章项目中的应用:

1)工厂模式:

电子签章项目可能需要创建不同类型的印章,例如椭圆形印章、矩形印章、圆形印章等,这时可以考虑使用工厂模式来封装印章对象的创建过程,并根据需要创建相应的印章对象。

public class SealFactory {public static Seal createSeal(SealType type) {switch (type) {case ELLIPSE:return new EllipseSeal();case RECTANGLE:return new RectangleSeal();case CIRCLE:return new CircleSeal();default:throw new IllegalArgumentException("invalid seal type");}}
}

2)观察者模式:

电子签章项目中可能需要不断更新印章的状态信息,例如位置、颜色、字体等,这时可以考虑使用观察者模式来实现状态更新通知。

public class Seal implements Observable {private List<Observer> observers;public Seal() {observers = new ArrayList<>();}@Overridepublic void addObserver(Observer observer) {observers.add(observer);}@Overridepublic void removeObserver(Observer observer) {observers.remove(observer);}@Overridepublic void notifyObservers() {for (Observer observer : observers) {observer.update(this);}}// 其他方法省略
}

3)建造者模式:

电子签章项目中可能需要灵活组装不同属性的印章,例如大小、形状、字体等,这时可以考虑使用建造者模式来实现印章对象的构建过程,并支持多种属性组合方式。

public class SealBuilder {private int width;private int height;private String text;private Font font;public SealBuilder setWidth(int width) {this.width = width;return this;}public SealBuilder setHeight(int height) {this.height = height;return this;}public SealBuilder setText(String text) {this.text = text;return this;}public SealBuilder setFont(Font font) {this.font = font;return this;}public Seal build() {// 根据属性创建印章对象Seal seal = new Seal();seal.setWidth(width);seal.setHeight(height);seal.setText(text);seal.setFont(font);return seal;}
}

以上是几个常见的设计模式及其在电子签章项目中的应用。通过合理地应用设计模式,可以使代码更加灵活、可维护和可扩展,提高开发效率和代码质量。

4)装饰器模式:

对于印章的一些额外处理(例如添加水印、修改颜色等),可以使用装饰器模式来对签章进行包装,从而增加功能并且不影响原有的签章结构。

以下是一个简单的示例代码,演示如何使用装饰器模式为印章添加水印和修改颜色:

// 印章接口
public interface Seal {void draw();
}// 基本印章类
public class BasicSeal implements Seal {@Overridepublic void draw() {System.out.println("绘制基本印章");}
}// 抽象装饰器类
public abstract class SealDecorator implements Seal {protected Seal seal;public SealDecorator(Seal seal) {this.seal = seal;}@Overridepublic void draw() {seal.draw();}
}// 水印装饰器类
public class WatermarkDecorator extends SealDecorator {public WatermarkDecorator(Seal seal) {super(seal);}@Overridepublic void draw() {super.draw();System.out.println("添加水印");}
}// 颜色装饰器类
public class ColorDecorator extends SealDecorator {public ColorDecorator(Seal seal) {super(seal);}@Overridepublic void draw() {super.draw();System.out.println("修改颜色");}
}// 客户端代码示例
public class Client {public static void main(String[] args) {// 创建基本印章对象Seal basicSeal = new BasicSeal();// 添加水印Seal watermarkSeal = new WatermarkDecorator(basicSeal);// 修改颜色Seal colorSeal = new ColorDecorator(watermarkSeal);// 绘制印章colorSeal.draw();}
}

在上面的示例中,我们定义了一个Seal接口,并实现了一个基本签章类BasicSeal。然后,我们使用抽象装饰器类SealDecorator来扩展基本印章类,并分别实现了添加水印和修改颜色的装饰器类。

在客户端代码中,我们通过创建基本印章对象,并依次使用水印装饰器和颜色装饰器来包装签章对象。最终,在调用colorSeal.draw()方法时,会按照顺序执行所有装饰器的处理逻辑,并输出完整的印章信息。

这样,我们就可以很方便地为印章添加各种额外的处理功能,而无需修改原有的印章结构。

5)策略模式(Strategy Pattern):

是一种常用的设计模式,它定义了一系列算法,并将每个算法封装成单独的类,使得它们可以相互替换。在 Java 中,可以使用策略模式来实现不同类型的签章。

以下是一个简单的示例代码,演示如何使用策略模式实现单页签章、多页签章和骑缝签章:

// 签章策略接口
public interface SignStrategy {void sign();
}// 单页签章策略类
public class SinglePageSignStrategy implements SignStrategy {@Overridepublic void sign() {System.out.println("单页签章");}
}// 多页签章策略类
public class MultiPageSignStrategy implements SignStrategy {@Overridepublic void sign() {System.out.println("多页签章");}
}// 骑缝签章策略类
public class SaddleStitchSignStrategy implements SignStrategy {@Overridepublic void sign() {System.out.println("骑缝签章");}
}// 签章上下文类
public class SignContext {private SignStrategy strategy;public SignContext(SignStrategy strategy) {this.strategy = strategy;}public void setStrategy(SignStrategy strategy) {this.strategy = strategy;}public void sign() {strategy.sign();}
}// 客户端代码示例
//当然在springmvc下通过注解来实现单页、多页、骑缝章之间的切换
public class Client {public static void main(String[] args) {// 创建签章上下文对象并设置策略为单页签章SignContext context = new SignContext(new SinglePageSignStrategy());// 绘制签章context.sign();// 切换策略为多页签章context.setStrategy(new MultiPageSignStrategy());// 绘制签章context.sign();// 切换策略为骑缝签章context.setStrategy(new SaddleStitchSignStrategy());// 绘制签章context.sign();}
}

在上面的示例中,我们定义了一个SignStrategy接口,并实现了三个不同类型的签章策略类:单页签章、多页签章和骑缝签章。然后,我们使用签章上下文类SignContext来维护当前的签章策略,并在调用sign()方法时根据当前策略签章。

6)享元模式:

对于签章中可能会出现重复的元素(例如相同字体、相同颜色等),可以使用享元模式来共享这些元素,从而减少内存占用和提高性能。

以下是一个简单的 Java 代码示例,演示如何使用享元模式来共享相同的字体对象:

import java.util.HashMap;
import java.util.Map;public class Font {private final String name;private final int size;public Font(String name, int size) {this.name = name;this.size = size;}public String getName() {return name;}public int getSize() {return size;}
}public class FontFactory {private static Map<String, Font> fonts = new HashMap<>();public static Font getFont(String name, int size) {String key = name + "_" + size;Font font = fonts.get(key);if (font == null) {font = new Font(name, size);fonts.put(key, font);}return font;}
}public class Text {private final String content;private final Font font;public Text(String content, Font font) {this.content = content;this.font = font;}public String getContent() {return content;}public Font getFont() {return font;}
}public class Document {private final List<Text> texts = new ArrayList<>();public void addText(String content, String fontName, int fontSize) {Font font = FontFactory.getFont(fontName, fontSize);Text text = new Text(content, font);texts.add(text);}
}

在这个示例中,Font 和 Text 类分别表示字体和文本。FontFactory 类是享元工厂,用于存储和共享字体对象。Document 类包含多个 Text 对象,并使用 FontFactory 来获取共享的字体对象。

当创建新的 Text 对象时,它会使用 FontFactory 来获取具有相同字体名称和大小的现有 Font 对象(如果存在),或者创建一个新的 Font 对象并添加到享元池中。这样可以避免创建大量相同的 Font 对象,从而减少内存占用和提高性能。

============================================

如果文章对你有帮助,不要忘记加个关注、点个赞!!必回关!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/22832.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

清华ACL 2023最新长文 | WebCPM:首个联网支持中文问答开源模型

2021年12月 WebGPT 的横空出世标志了基于网页搜索的问答新范式的诞生&#xff0c;在此之后&#xff0c;New Bing 首先将网页搜索功能整合发布&#xff0c;随后 OpenAI 也发布了支持联网的插件 ChatGPT Plugins。大模型在联网功能的加持下&#xff0c;回答问题的实时性和准确性都…

忆享聚焦|人工智能、元宇宙、云计算、5G基站…近期热点资讯一览

“忆享聚焦”栏目第十二期来啦&#xff01;本栏目汇集近期互联网最新资讯&#xff0c;聚焦前沿科技&#xff0c;关注行业发展动态&#xff0c;筛选高质量讯息&#xff0c;拓宽用户视野&#xff0c;让您以最低的时间成本获取最有价值的行业资讯。 目录 行业资讯 1.ChatGPT火爆全…

中国开源项目迈向全球化!

整理 | 屠敏 出品 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09; 中国开源正在登上全球化舞台&#xff0c;成为一股不容忽视的中坚力量。在国际开源领域&#xff0c;ant-design、vue-element-admin 等热门开源跻身前列&#xff1b;阿里巴巴、腾讯、华为、字节跳动、百…

大模型狂潮:各大厂纷纷亮剑,谁能笑傲江湖?

引言&#xff1a;四月AI大模型潮流来袭 假如我们站在未来回首往事&#xff0c;或许会惊讶地发现&#xff0c;这个春意融融的四月&#xff0c;竟是中国AI史上的一个重要节点。百度、阿里、腾讯、字节、商汤、京东、华为、360等科技巨头纷纷亮出底牌&#xff0c;推出各自的AI大语…

数据库领域3月大事件

本文整理2023年3月份最新数据库厂商、数据库领域的行业动态、以及各家云数据库厂商的产品动态。 本文主要整理了数据库领域的最新动态&#xff1a; 数据库厂商的重磅事件&#xff1b; 各数据库的产品更新。 一、重磅事件 ▋《数字中国建设整体布局规划》发布 近日&#xff0c;中…

GPT生成精美Echarts图表

【需求】&#xff1a;我想要用 echarts V5 来开发一个【柱状图表】 【输入文本】&#xff1a;我想用echarts开发一个【条形图】&#xff0c;目标帮我分析1-3天内每天访问我网站的用户数趋势&#xff0c;1-3天的用户数分别为20&#xff0c;50&#xff0c;60&#xff0c;请帮我生…

【花雕学AI】ChatGPT的50种神奇用法:让你的聊天更有趣,更有用,更有创意

【花雕学AI】是一个普通人学习AI的专栏&#xff08;于2023年3月29日开始&#xff09;&#xff0c;由驴友花雕撰写&#xff0c;主要介绍了人工智能领域的多维度学习和广泛尝试&#xff0c;目前已包含七十多篇文章&#xff0c;分别介绍了ChatGPT、New Bing和Leonardo AI等人工智能…

AI 大战高考作文!实测 ChatGPT、文心一言、通义千问等 8 款“神器”

整理 | 郑丽媛 出品 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09; 今天中午十一点半&#xff0c;2023 年高考作文题目火热出炉&#xff0c;其中全国甲卷作文题引人深思&#xff1a; 人们因技术发展得以更好地掌控时间&#xff0c;但也有人因此成了时间的仆人。 身处技…

chatgpt最强平替国内可用免费开源llama2模型下载使用

1&#xff0c;github下载llama2项目 打开下面的项目地址&#xff1a; GitHub - facebookresearch/llama: Inference code for LLaMA models 下载项目代码: GitHub - facebookresearch/llama: Inference code for LLaMA models 2&#xff0c;填写申请信息申请授权 https://…

探究 ChatGPT 4 的优势:基于 GPT-3.5 架构的大型语言模型

随着人工智能技术的不断发展&#xff0c;自然语言处理领域也取得了巨大的进展。其中&#xff0c;GPT&#xff08;Generative Pre-trained Transformer&#xff09;模型系列是自然语言处理领域的重要里程碑之一。而 ChatGPT 4 则是基于 GPT-3.5 架构的大型语言模型&#xff0c;相…

60行NumPy手搓GPT

本文约24000字&#xff0c;建议阅读30分钟 本文我们将仅仅使用60行Numpy[6]&#xff0c;从0-1实现一个GPT。 本文原载于尹志老师博客&#xff1a;https://jiqihumanr.github.io/2023/04/13/gpt-from-scratch/[1]。 本文还是来自Jay Mody[2]&#xff0c;那篇被Andrej Karpathy手…

GPT4.0一句话实现各类图表制作,让数据可视化变得更简单!类图、流程图、ER图.....

不知道大家有没有被ER建模工具复杂的操作按钮给困扰过。在作者学习ER建模时&#xff0c;曾希望能直接画出类图&#xff0c;但最终还是不得不学习繁琐的操作流程。然而&#xff0c;随着GPT的出现&#xff0c;AI现在也可以绘制UML图了&#xff01;今天要向大家分享一个AI工具&…

当ChatGPT遇到网络安全】

ChatGPT&#xff1a;是人工智能技术驱动的自然语言处理工具&#xff0c;它能够通过学习和理解人类的语言来进行对话&#xff0c;还能根据聊天的上下文进行互动&#xff0c;真正像人类一样来聊天交流&#xff0c;甚至能完成撰写邮件、视频脚本、文案、翻译、代码等任务。GPT 是 …

重塑底层逻辑,涅槃重生继续远航

背景介绍 从贫困县爬出来本硕均为211学校&#xff0c;在机械专业学习7年&#xff0c;有4年的时间热衷于编程学习。因此一路跨行到IT行业。 履历介绍 从毕业后一直在AI算法行业研究&#xff0c;呆过初创公司&#xff0c;目前在上市公司上班。尝尽IT的苦也吃过IT的甜。从毕业一…

如何为 Kubernetes 集群快速部署一个 ChatGPT 人工智能聊天机器人

公众号关注 「奇妙的 Linux 世界」 设为「星标」&#xff0c;每天带你玩转 Linux &#xff01; 今天我想分享一个有趣的项目叫做 “K8s ChatGPT Bot[1]”。该项目的目的是为 K8s 集群部署一个 ChatGPT 机器人。我们可以询问 ChatGPT 帮助我们解决 Prometheus 的警报&#xff0c…

ChatGPT进一步联网,距离成为超级流量入口还有多远?

备受瞩目的ChatGPT联网功能又更进一步。 继三月首次推出插件功能&#xff08;Plugin&#xff09;后&#xff0c;本周ChatGPT再次更新&#xff0c;将向Plus用户开放约70个第三方插件&#xff0c;覆盖购物、餐饮、旅行、天气、运算、翻译、分析数据等多种功能。 一个多月前&…

新闻 | 华院计算入选中国科技产业智库AIGC产业图谱

4月&#xff0c;中国科技产业智库甲子光年发布《AIGC应用与实践研究展望报告》及AIGC产业图谱&#xff0c;面向AIGC技术创新者、产业参与者、资本机构和政府等各方展现AIGC产业的整体生态环境和行业发展。华院数智人凭借其在生成式AI技术、人机交互能力和市场应用优势入选该图谱…

强化学习分类与汇总介绍

1.强化学习&#xff08;Reinforcement Learning, RL&#xff09; 强化学习把学习看作试探评价过程&#xff0c;Agent选择一个动作用于环境&#xff0c;环境接受该动作后状态发生变化&#xff0c;同时产生一个强化信号(奖或惩)反馈给Agent&#xff0c;Agent根据强化信号和环境当…

【大讨论】“ChatGPT用户增长乏力,为什么?”

云创大数据总裁刘鹏老师发起的“大模型研发技术交流群”太给力了&#xff01;昨天群里发起了“ChatGPT用户增长乏力&#xff0c;为什么&#xff1f;”的大讨论。 今年1月&#xff0c;ChatGPT的环比增长率为131.6%&#xff0c;2月份为62.5%&#xff0c;3月份为55.8%&#xff0c;…

又整新活,AI 杀麻了!

来源|OSC开源社区(ID:oschina2013) 这几天&#xff0c;ChatGPT不得不说是真火啊&#xff0c;在科技圈也是引起了不少的讨论。问答、聊天、讲故事、写代码、分析代码、找bug&#xff0c;写文章...等等都不在话下&#xff0c;妥妥滴整活大师了。 ChatGPT由人工智能研究公司OpenAI…