【Java】设计模式——单例、工厂、代理模式

【Java】设计模式——单例、工厂、代理模式
在这里插入图片描述
🎁个人主页:User_芊芊君子
🎉欢迎大家点赞👍评论📝收藏⭐文章
🔍系列专栏:【Java】内容概括
在这里插入图片描述


在这里插入图片描述


【Preface】

在 Java 编程世界里,设计模式是前辈们总结出的解决常见问题的优秀方案。今天,我们就来深入剖析单例模式、工厂模式和代理模式,带大家领略设计模式的魅力。

文章目录:

一、单例模式

单例模式确保一个类只有一个实例

1.饿汉式

程序启动时就进行单例对象的初始化,无论是否被使用线程安全浪费资源(一直未被使用)

static修饰的静态变量只能有一个

publicclassSingleton{privatestaticSingleton instance =newSingleton();privateSingleton(){}publicstaticSingletongetInstance(){return instance;}}
publicclassTest{publicstaticvoidmain(String[] args){Singleton singleton1 =Singleton.getInstance();Singleton singleton2 =Singleton.getInstance();System.out.println(singleton1 == singleton2);}}
在这里插入图片描述

2.懒汉式

延迟加载,单例对象在首次访问时才初始化,节省了资源

ublic classSingleton2{privatestaticSingleton2 instance;//nullprivateSingleton2(){}publicstaticSingleton2getSingleton(){if(instance ==null){ instance =newSingleton2();}return instance;}}

二、工厂模式

工厂模式定义一个创建对象的接口(只创建对象的工厂类),使创建对象的过程使用对象的过程分离

  • 创建工厂接口(抽象工程)
publicinterfaceUserFactory{UsercreateUser(String name,int age);}
  • 实现具体工厂
publicclassAdminFactoryimplementsUserFactory{@OverridepublicUsercreateUser(String name,int age){returnnewAdminUser(name, age);}}
publicclassNormalFactoryimplementsUserFactory{@OverridepublicUsercreateUser(String name,int age){returnnewAdminUser(name, age);}}
  • 使用方式
publicclassTest{publicstaticvoidmain(String[] args){//管理员UserFactory adminFactory =newAdminFactory();User admin = adminFactory.createUser("baby",10);//用户UserFactoryNormalFactory=newNormalFactory();User normal1 =NormalFactory.createUser("lisy",12);User normal2 =NormalFactory.createUser("long",14);}
在⼯⼚⽅法模式中,每种⽤⼾类型都有⾃⼰的⼯⼚类。要添加新的⽤⼾类型,只需创建新的⼯⼚ 类,⽆需修改现有代码。代码不会重复,创建对象的过程,封装到了⼯⼚当中更加解耦

三、代理模式

一个类代表另一个类的功能,通过代理对象来控制实际对象的访问,相当于“中介

  • User类
publicabstractclassUser{protectedString name;protectedint age;//Alt+InsterpublicUser(String name,int age){this.name = name;this.age = age;}publicabstractvoidmenu();}
  • NormalUser 和AdminUser 类的结构如下:
publicclassAdminUserextendsUser{publicAdminUser(String name,int age){super(name, age);}@Overridepublicvoidmenu(){System.out.println("管理员菜单");}publicvoidaddBook(String bookName){System.out.println("普通用户"+ name +"借阅了"+ bookName);}}
publicclassNormalUserextendsUser{publicNormalUser(String name,int age){super(name, age);}@Overridepublicvoidmenu(){System.out.println("普通用户的菜单");}publicvoidborrowBook(String bookName){System.out.println("普通用户"+ name +"借阅了"+ bookName);}}
  • 代理类结构
在该代理类中对borrowBookreturnBook⽅法提供了代理ProxyUser 为不同类型的User 提供代理
publicclassProxyUser{privateUser realUser;publicProxyUser(User user){this.realUser = user;}publicvoidmenu(){this.realUser.menu();}publicvoidborrowBook(String bookName){System.out.println("检查用户权限");if(this.realUser instanceofNormalUser){//User类里面不包含borrowBook,需要强转((NormalUser)this.realUser).borrowBook(bookName);}else{System.out.println("没有权限借阅");}}publicvoidaddBook(String bookName){System.out.println("检查用户权限");if(this.realUser instanceofAdminUser){//User类里面不包含borrowBook,需要强转((AdminUser)this.realUser).addBook(bookName);}else{System.out.println("没有权限上架");}}}
publicstaticvoidmain(String[] args){UserFactory adminFactory =newAdminFactory();User admin = adminFactory.createUser("baby",10);UserFactoryNormalFactory=newNormalFactory();User normal1 =NormalFactory.createUser("lisy",12);User normal2 =NormalFactory.createUser("long",14);//代理模式ProxyUser proxyAdminUser =newProxyUser(admin); proxyAdminUser.borrowBook("图书1");ProxyUser proxyNormalUser =newProxyUser(normal1); proxyNormalUser.addBook("图书1"); proxyNormalUser.borrowBook("图书1"); proxyNormalUser.borrowBook("图书2");}
在这里插入图片描述

【总结】

设计模式不是银弹,而是解决特定问题的优秀思路。在实际开发中,我们要根据具体场景选择合适的设计模式,让代码更加优雅、可维护。希望本文能帮助大家更好地理解和运用这三种设计模式!

Read more

字节跳动AI IDE:Trae 完全上手指南——从零安装到熟练使用,开启AI驱动开发新范式

字节跳动AI IDE:Trae 完全上手指南——从零安装到熟练使用,开启AI驱动开发新范式

目录 * 前言:当IDE进化为智能体 * 1.初识Trae * 1.1 Trae是什么? * 1.2 Trae的核心优势 * 1.3 谁适合使用Trae? * 2.安装与初始配置 * 2.1 支持的操作系统 * 2.2 下载与安装步骤 * 2.3 验证安装成功 * 3.界面导航(五分钟熟悉布局) * 3.1 核心区域功能说明 * 3.2 常用快捷键速查 * 4.核心AI功能详解 * 4.1 Chat模式:随时提问的编程助手 * 4.2 Builder模式:自然语言生成完整项目 * 4.2.1 实战案例:做一个待办事项应用 * 4.

By Ne0inhk

一文彻底搞懂 OpenClaw:是什么、怎么装、怎么用、结合2026最新AI趋势完整教程

一文彻底搞懂 OpenClaw:是什么、怎么装、怎么用、结合2026最新AI趋势完整教程 (超详细版,新手也能一步步跟着做) 一、先讲清楚:OpenClaw 到底是什么? 1. 最简单定义 OpenClaw 是一个开源、免费、本地优先、能让AI“动手操作电脑”的智能体框架。 它不是大模型本身,而是给大模型装上手、眼睛、记忆、工具,让 AI 能: * 控制电脑、操作文件 * 自动打开浏览器、查新闻、搜资料 * 执行命令、写代码、跑脚本 * 自动完成一系列复杂任务 你可以把它理解为: ChatGPT 只是聊天,OpenClaw 是真的能帮你打工。 2. 结合 2026 最新新闻背景 2026 年被称为 AI

By Ne0inhk
AI毕业论文写作指令全攻略:50条高效生成指令助你零基础完成高质原创论文

AI毕业论文写作指令全攻略:50条高效生成指令助你零基础完成高质原创论文

引言 在当今这个数字化迅猛发展的时代,人工智能(AI)技术正以一种前所未有的速度,深刻地改变着我们的生活与工作模式。对于那些即将毕业的大学生和研究生而言,撰写一篇高质量的毕业论文,无疑是他们迈向学术和职业道路的重要一步。然而传统的论文写作过程往往充满了各种挑战,需要投入大量的时间和精力。而人工智能技术的出现,为论文写作提供了一种全新的解决方案,它能够助力我们更高效地完成论文撰写工作。同时,在撰写过程中也可以借助图灵论文ai写作助手这样的学术ai工具,高效完成论文写作,一站式解决论文烦恼。本文将为大家呈上一份全面的AI毕业论文写作指令攻略,其中包含50条高效生成指令。即便你是零基础,也能借助这些指令完成高质量的原创论文。 论文前期准备阶段的指令 确定研究论题 * 指令1:“结合当前[具体领域]的热门趋势,给出5个具备研究价值的毕业论文论题。” 举例来说,在人工智能领域,你可以输入“结合当前人工智能的热门趋势,给出5个具有研究价值的毕业论文论题。”此时,AI可能会给出诸如“基于深度学习的图像识别算法优化研究”“人工智能在医疗诊断中的应用与挑战”等论题。 * 指令2:“对

By Ne0inhk
GenFlow 3.0全攻略:从零基础到精通AI工作流,一篇就够,建议收藏!

GenFlow 3.0全攻略:从零基础到精通AI工作流,一篇就够,建议收藏!

GenFlow 3.0具备Agent记忆、Office联动和多模态生成能力,能并行处理任务并支持中途打断。它记住用户偏好,连接网盘与文库,生成式工作流解决了日常文档处理难题。作为AI工作流工具,它从被动响应转向主动协助,让AI真正"记住"用户,提高工作效率。 我对GenFlow这款产品一直挺好奇的, 3个月前听说的版本是能让100个Agent同时干活,Agent执行过程中可以中途打断,信息检索的时候可以带上网盘和文库,当时忙忘了没有深度去体验。 这次看到百度世界大会上又看到GenFlow了, 更新到3.0,新增了Agent记忆,Office三件套,能并行生成的模态更多了,横跨⽂字、图⽚、视频、播客、⽹⻚、地图等等,一样保持网盘的联动。 🔗 wenku.baidu.com 事不过三,我决定来把测评。 我会把记忆排到第一位, AI产品的记忆能力是可以追溯到24年2月GPT刚推出Memory的时候。那时候我还在天天手动录入那种“我是Sam,GPT你回答我的时候要尽可能详细点”或者是“你回答对了我就奖励你200刀”的邪修提示语。 快两年过去了,现在各种模型像Claude、

By Ne0inhk