news 2026/6/10 7:38:02

java模式

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
java模式

一.单例模式

1.饿汉式

将构造器私有后 无法再new A的对象

而外面无法创建A对象了 想通过调用类方法来得到对象 而类方法只会返回类变量a

而静态只会执行一次 所以只会有一个对象

2.懒汉式

3.案例讲解

public class Principle { private static Principle principle; public String name; private Principle(String name){ this.name=name; } public static Principle getPrinciple(){ if(principle==null){ principle=new Principle("王校长"); } return principle; } public void announcement(String message){ System.out.println(name+"通知了"+message); } public void approvrDocument(String file){ System.out.println(name+"审判了"+file); } }
public class School { public static void main(String[] args) { Principle pr1=Principle.getPrinciple(); pr1.announcement("放假三天"); Principle pr2=Principle.getPrinciple(); pr2.approvrDocument("食堂整改文件"); if(pr2==pr1){ System.out.println("上述两个校长是一个人"); }else { System.out.println("上述两个校长不是一个人"); } } }

二.工厂模式


  • 解耦:对象创建和使用分离,调用者无需知道对象创建细节(不用写new IPhone());
  • 复用:创建逻辑集中在工厂,避免重复代码;
  • 易扩展:新增产品只需修改 / 新增工厂,不影响业务代码;
  • 易维护:创建逻辑出问题时,只需改工厂类,不用改所有调用处。

三.代理模式

为目标对象(被代理者)提供一个 “代理对象”,由代理对象控制对目标对象的访问,并可以在访问前后添加额外逻辑(比如日志、权限校验、事务),而目标对象只需专注于核心业务。

静态代理是代理模式的基础版本,特点是:代理类在编译期就已确定

你(目标对象)想租房,但不想自己找房源、谈价格、签合同(额外逻辑),只专注于 “住房子”(核心业务);中介(代理对象)帮你完成所有额外操作,你只需通过中介就能租到房子,且中介可以在租房前后加自己的操作(比如收中介费、核验身份)。

静态代理的核心要素

  1. 共同接口:目标类和代理类实现同一个接口(定义统一的业务方法);
  2. 目标类:实现核心业务逻辑(比如租房);
  3. 代理类:持有目标类对象,重写接口方法,在调用目标方法前后添加额外逻辑。
// 租房接口:定义核心业务方法 public interface RentHouse { // 核心业务:租房 void rent(); }
// 租客类:专注于核心业务(租房) public class Tenant implements RentHouse { @Override public void rent() { System.out.println("租客:我要租朝南、带阳台的房子!"); // 核心业务逻辑 } }
// 中介类:代理租客租房,添加额外逻辑 public class RentProxy implements RentHouse { // 持有目标对象(租客)的引用 private RentHouse tenant; // 构造方法:传入目标对象 public RentProxy(RentHouse tenant) { this.tenant = tenant; } @Override public void rent() { // 调用目标方法前:额外逻辑(前置处理) beforeRent(); // 调用目标对象的核心业务方法 tenant.rent(); // 调用目标方法后:额外逻辑(后置处理) afterRent(); } // 前置额外逻辑:找房源、核验身份 private void beforeRent() { System.out.println("中介:帮租客找符合要求的房源,核验租客身份!"); } // 后置额外逻辑:签合同、收中介费 private void afterRent() { System.out.println("中介:和租客签租房合同,收取中介费!"); } }
public class ProxyDemo { public static void main(String[] args) { // 1. 创建目标对象(租客) RentHouse tenant = new Tenant(); // 2. 创建代理对象(中介),传入目标对象 RentHouse proxy = new RentProxy(tenant); // 3. 调用代理对象的方法(实际是中介帮租客完成租房) proxy.rent(); } }

优点
  • 解耦:目标类只关注核心业务,额外逻辑(日志、权限)全部交给代理类,代码职责清晰;
  • 易扩展:无需修改目标类代码,只需在代理类中添加 / 修改额外逻辑(符合 “开闭原则”);
  • 简单易用:编译期确定代理关系,代码结构清晰,新手易理解。
缺点
  • 类数量膨胀:每一个目标类都需要对应一个代理类(比如新增Landlord房东类,就要新增LandlordProxy);
  • 维护成本高:如果接口新增方法,所有目标类和代理类都要同步修改;
  • 灵活性低:代理关系编译期固定,无法动态切换代理逻辑。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/10 3:08:47

芯片供电的“隐形守护者”:深入解析Decap的设计哲学与实战策略

1. 芯片供电系统的"急救包":Decap的本质与核心价值 第一次接触芯片设计时,我盯着电源网络仿真波形百思不得其解——明明供电电压足够稳定,为什么芯片某些区域会出现周期性的电压跌落?直到资深导师指着版图上那些星星点点…

作者头像 李华
网站建设 2026/6/10 12:24:36

LVGL指针表盘开发避坑指南:透明图片处理与旋转中心设置

LVGL指针表盘开发避坑指南:透明图片处理与旋转中心设置 在智能穿戴设备和工业仪表盘开发中,LVGL因其轻量高效的特点成为嵌入式GUI开发的首选。指针表盘作为经典的时间显示方式,其实现过程中常会遇到两个关键难题:透明图片的异常显…

作者头像 李华
网站建设 2026/6/10 3:07:44

start.sh与stop.sh脚本详解:DAMO-YOLO手机检测服务自动化管理

start.sh与stop.sh脚本详解:DAMO-YOLO手机检测服务自动化管理 1. 项目概述 今天我们来深入解析一个实用工具——基于DAMO-YOLO的手机检测服务的自动化管理脚本。如果你正在使用这个实时手机检测系统,那么start.sh和stop.sh就是你最得力的助手。 这个系…

作者头像 李华
网站建设 2026/6/9 3:12:44

看完就会:10个降AI率软件降AIGC网站测评,专科生快速过关攻略

在当前的学术写作环境中,AI生成内容(AIGC)的使用越来越普遍,但随之而来的高查重率和明显的AI痕迹也给许多学生带来了困扰。尤其是专科生群体,在论文撰写过程中往往需要兼顾内容质量与合规性,如何有效降低AI…

作者头像 李华
网站建设 2026/6/10 3:20:06

Cogito-v1-preview-llama-3B快速上手:Ollama模型选择入口定位与提问技巧

Cogito-v1-preview-llama-3B快速上手:Ollama模型选择入口定位与提问技巧 想试试最新的开源大模型,但面对一堆模型名字和复杂的部署步骤,是不是有点无从下手?别担心,今天带你快速上手一个性能强劲的“小钢炮”——Cogi…

作者头像 李华
网站建设 2026/6/9 3:44:14

【笔试真题】- OPPO-2026.03.22

📌 点击直达笔试专栏 👉《大厂笔试突围》 💻 春秋招笔试突围在线OJ 👉 笔试突围在线刷题 bishipass.com OPPO-2026.03.22 这套题的层次也比较顺:第 1 题核心是把式子改写成“总和减去三倍极值”,看清最优分组后可以一眼写完;第 2 题是经典的降序贪心,把每个数一…

作者头像 李华