小记:动态代理和工厂模式

工厂模式的发展

简单工厂模式

假如有小米和苹果两家电脑要生产,现有一个工厂接到活了
那么首先写一个接口

public abstract class Computer {public abstract void setOperationSystem();
}

再细化小米和苹果的制作方法

public class MacComputer extends Computer {@Overridepublic void setOperationSystem() {System.out.println("Mac笔记本");}
}
public class MiComputer extends Computer {@Overridepublic void setOperationSystem() {System.out.println("小米笔记本");}
}

建立工厂去执行这两个制作方法,当然接到单后,才做

public class SimpleComputerFactory {public static Computer makeComputer(String brand) {Computer computer=null;switch (brand) {case "mac":computer=new MacComputer();break;case "mi":computer=new MiComputer();break;default:break;}return computer;}
}

使用

public static void main(String[] args) {Computer computer= SimpleComputerFactory.makeComputer("mi");computer.setOperationSystem();}

输出

小米笔记本

这方法好是好 但是违背了开闭原则,如果要才接单比如华为的就要新写一个制作类 且要改工厂的方法
所以不好 ,应该去扩展而不是去修改

工厂模式

其实差不多 ,为了不去修改原来的方法,只能设计为每一个工厂只生成固定的产品
例如华为就生成华为

public interface ComputerFactory {Computer makeComputer();
}
public class MacComputerFactory implements ComputerFactory {@Overridepublic Computer makeComputer() {//去new一个制作的实例return new MacComputer();}
}
public class MiComputerFactory implements ComputerFactory {@Overridepublic Computer makeComputer() {return new MiComputer();}
}

具体使用

public static void main(String[] args) {//生产Mac电脑ComputerFactory macFactory=new MacComputerFactory();macFactory.makeComputer().setOperationSystem();//生产小米电脑ComputerFactory miFactory=new MiComputerFactory();miFactory.makeComputer().setOperationSystem();}

动态代理

原理
首先Jdk的动态代理实现方法是依赖于接口的,首先使用接口来定义好操作的规范。然后通过Proxy类产生的代理对象调用被代理对象的操作,而这个操作又被分发给InvocationHandler接口的 invoke方法具体执行

大白话就是用一个proxy类去调用被调用的方法

先讲一个静态代理在这里插入图片描述

动态代理

先创建一个原告类

public class CuiHuaNiu implements ILawSuit{@Overridepublic void submit(String proof) {System.out.println(String.format("老板欠薪跑路,证据如下:%s",proof));}@Overridepublic void defend() {System.out.println(String.format("铁证如山,%s还牛翠花血汗钱","马旭"));}}

再写一个律师类

public class DynProxyLawyer implements InvocationHandler {private Object target;//被代理的对象public DynProxyLawyer(Object obj){this.target=obj;}@Overridepublic Object invoke(Object proxy, Method method, Object[] args) throws Throwable {System.out.println("案件进展:"+method.getName());Object result=method.invoke(target,args);return result;}
}

这里的代理类需要去继承InvocationHandler接口 当使用的时候invoke方法会去调用被代理类的方法
再写一个工厂类

public class ProxyFactory {public static Object getDynProxy(Object target) {InvocationHandler handler = new DynProxyLawyer(target);return Proxy.newProxyInstance(target.getClass().getClassLoader(), target.getClass().getInterfaces(), handler);}}

这个工厂就是去返回一个动态的Proxy类,他需要一个代理类 那么就去创建他,也需要一下他的其他信息
loader是去定义这个新的代理类,interfaces获得这个类的接口去依赖

具体使用

public class Text {public static void main(String[] args) {ILawSuit proxy= (ILawSuit) ProxyFactory.getDynProxy(new CuiHuaNiu());proxy.submit("工资流水在此");proxy.defend();}
}

案件进展:submit
老板欠薪跑路,证据如下:工资流水在此
案件进展:defend
铁证如山,马旭还牛翠花血汗钱

动态代理

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

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

相关文章

单调、加班、血汗工厂,被夸大的富士康背后真相到底是什么?

随着工业4.0概念、中国制造2025计划的提出,金融危机、泡沫经济连续不断地出现以及全世界人民之于实体工作岗位的渴望,制造业再一次进入舆论中心,专家开始剖析制造业的前世今生,一些神秘的制造企业渐渐揭开面纱,普通人则…

年轻人的996,马爸爸们的人血馒头与血汗工厂的历史宿命

年轻人的996,马爸爸们的人血馒头与血汗工厂的历史宿命 奇怪的中国互联网巨头们 五年前的富士康十三连跳,令世人瞠目结舌,带血的GDP一时间成为中国工业化转型过程中的巨大耻辱。 来到今天的2019年,中国互联网发展速度同样令世人瞩…

牛逼的电商运营为什么不自己开店铺要去打工?(知乎精选)

我做了七年电商,虽然不牛逼,但我因为同样的问题纠结过,所以说说我的心路历程。 就在刚刚过去的双十一,我在我媳妇面前得瑟,说我公司在双十一当天又卖了多少千万的时候,我媳妇讥讽我说:你这么牛&…

区块链的命和血汗工厂的病

无处安放的区块链式人生 2月29日,北京,中关村。 春节假期结束,区块链创业者李云良就没有凌晨两点前睡着过了。他需要夜以继日地为自己的项目NBchain融资,十一个员工的工资和年终奖被他压到了三月,如果到时还解决不了…

WritingGPT: 基于ChatGPT和AutoGPT打造个人写作团队

本文介绍了如何通过定义多个GPT角色,以自动化流水线的方式打造个人写作团队,让AI帮助我们完成文章写作、修改、SEO等所有流程。原文: How I Built WritingGPT, a Fully Automated AI Writing Team ChatGPT是AI内容创造领域的巨大飞跃,但当我们…

微信个人名片H5生成器

文章目录 前言一、微信个人名片H5生成器二、程序演示与下载1.程序演示2.程序下载 前言 今天介绍的是一款个人名片生成器,生活中也是比较常用。比如有哪个妹子要你的微信时可以发给她 一、微信个人名片H5生成器 可放在公众号内,是一个自适应的开源源码…

这么递名片才高效!教你给应用开发个交换名片功能

在工作和生活中,遇见新的同事或者合作伙伴,交换名片是一个常见的用户需求,纸质名片常忘带、易丢失,是客户的一个痛点。因此,市场上出现了很多交换电子名片的APP和小程序。那么,如何给自己的APP开发一个名片…

HTML制作个人名片

题目:.完成以下效果图,上传代码和效果图。(具体样式提示如下: 整个大盒子尺寸为:150*278,效果图居中对齐,左右外边距50px,字体:楷体;2.段落设置:尺寸:138*33,…

高斯判别分析(GDA)公式推导

解:将概率分布代入对数似然函数, l ( ψ , μ 0 , μ 1 , ∑ ) ∑ i 1 m l o g p X ∣ Y ( x ( i ) ∣ y ( i ) ; μ 0 , μ 1 , ∑ ) ∑ i 1 m l o g p Y ( y ( i ) ; ψ ) l(\psi,\mu_0,\mu_1,\sum)\sum^m_{i1}{log{p_{X|Y}(x^{(i)}|y^{(i)};\mu_0…

算法笔记(六):差分法

(6)差分法 目录 一、差分 1、介绍 2、定义 3、差分与前缀和 二、一维差分 1、定义 2、作用 3、方法 接下来是实战演练!!! 三、二维差分 1、定义 2、作用 3、方法 接下来是实战演练!&#xf…

差分 --算法竞赛专题解析(32)

本系列文章将于2021年整理出版。前驱教材:《算法竞赛入门到进阶》 清华大学出版社 网购:京东 当当   作者签名书:点我 有建议请加QQ 群:567554289 文章目录 1. 一维差分1.1 一维差分的概念1.2 差分的局限性 2. 二维差分2.1 用差…

MiniGPT4,开源了

点击“开发者技术前线”,选择“星标” 让一部分开发者看到未来 量子位 | 公众号 QbitAI GPT-4识图功能迟迟不开放,终于有人忍不住自己动手做了一个。 MiniGPT-4来了,Demo开放在线可玩。 传一张海鲜大餐照片上去,就能直接获得菜谱。…

不愧是微软出品的工具,逆天!

上一篇:逆向了一款涉黄APP,发现了她们的小秘密... 大家好,今天分享一些微软出品的实用小工具,希望对大家有所帮助。 原文链接:https://www.pconline.com.cn/win11/1501/15013664.html 系统增强工具PowerToys 下载地址&…

人工智能AI如何工作及使用

chatgpt聊天软件是一款非常好玩的智能聊天软件,如果你觉得生活非常无趣,或者没有人能诉说烦恼,那么这款软件一定非常适合你。 小凡AI是一款专业的智能助手,可以帮助您快速、高效地处理各种工作任务。它包含强大的语音识别和自然语…

老胡的周刊(第094期)

老胡的信息周刊[1],记录这周我看到的有价值的信息,主要针对计算机领域,内容主题极大程度被我个人喜好主导。这个项目核心目的在于记录让自己有印象的信息做一个留存以及共享。 🎯 项目 qrbtf[2] 艺术二维码生成器: qrb…

两则靠谱的AI招聘信息;长文档阅读的辅助总结神器 Obsidian Copliot;LLM 应用开发全栈指南;重写人工智能时代的创业手册 | ShowMeAI日报

👀日报&周刊合集 | 🎡生产力工具与行业应用大全 | 🧡 点赞关注评论拜托啦! 🤖 两则靠谱的AI招聘信息:奇绩创坛 & Copilot Hub 6月14日,奇绩创坛在「奇绩大模型日报体验群」发布招聘信息…

比OpenAI更快一步,最新开源的MiniGPT-4模型可让开发者提前感受GPT-4识图能力!...

整理 | 屠敏 出品 | CSDN(ID:CSDNnews) 迄今为止,GPT-4 凭借多模态能力已经成为 AI 领域备受关注的大模型,不过值得注意的是,OpenAI 在推出 GPT-4 时虽然引入了对图像理解的能力,但并没有在除了…

谷歌Bard大升级:支持中文,识图功能上线

出品 | OSC开源社区(ID:oschina2013) 谷歌对话式 AI 产品 Bard 昨日发布了重要更新,现在已支持更多国家 / 地区和更多语言(包括中文)。 此外还添加了 Google Lens 功能 —— 可在 prompt 中使用图像,以及新…

ChatGPT类产品和技术的产生会带来哪些影响?

2023年3月15日,GPT-4的发布再次引爆互联网,原有的自然语言理解、推理和对话能力继续增强,更引入了识图等多模态识别功能,有研究认为可以将其视为“通用性人工智能”的初步阶段。在国内,百度同类产品“文心一言“的发布…

基于GPT-4的 IDEA 神仙插件,无需魔法,亲测好用!

近日,Intellij IDEA的插件商店,悄然上线了一个新的插件——Bito,据说可以基于GPT-4和ChatGPT来写代码。短短几天,已经有50多K的下载量了。 我帮大家试用了一下,亲测好用! 根据插件介绍显示,Bito…