什么是工厂模式、代理模式?
什么是工厂模式、代理模式?
工厂模式 :实例化对象,用工厂方法代替new操作的一种模式。
代理模式 :
- 代理 :分为静态代理和动态代理;现有对象不能满足正常的开发需求,需要有一个能够代替现有对象提供服务
动态代理 :编译时代理类不存在;运行时动态生成的代理对象;
静态代理 :编译时代理类已经存在;静态代理对于开发没有意义; - 被代理类/对象/方法:只有核心功能;
- 增强处理 :公共处理、额外功能、建议、通知;很多地方都需要的功能;比如日志记录、事务处理、效率分析、性能分析;
- 代理类/对象/方法 :核心功能+增强处理;
- 切入点:需要增强处理的方法,做一个标记;
- 织入/编织:增强处理,添加到切入点位置的这个过程;
- 切面:增强处理在切入点位置织入后,形成一个几个概念;
AOP:面向切面编程
以横切的思想,在运行的过程中,把摸一个功能添加在指定的位置;
定义好要添加的功能《增强》,定义好需要功能的地方《切入点》; 在运行的过程中把功能加入到需要的地方;
AOP是在OOP的基础上完成的,是对OOP的补充;
AOP的应用:
1. 做共工处理;比如日志记录、事务控制,减少代码冗余;
2. 在不修改原有代码的基础上,做功能扩展
AOP通过动态代理实现,面向接口编程,使用的是JDK动态代理
DI : 依赖注入:
① 设值注入:反射加载无参构造方法,set方法进行赋值;
② 构造注入:反射加载带参数构造方法,通过形参进行赋值;
③ 自动装配:反射加载无参构造方法,set方法进行赋值;按名字装配,按类型装配
什么是工厂模式、代理模式?相关推荐
- 设计模式(初探工厂与代理模式)——学习记录
0 设计模式 一种思维,一种态度,一种进步 1 创建型模式:省去new的过程 单例模式 工厂模式 抽象工厂模式 建造者模式 原型模式. 2 结构型模式: 适配器模式 桥接模式 装饰模式 组合模式 外观 ...
- 设计模式、原则、饿汉式单例模式、抽象工厂、代理模式、观察者模式、模板方法模式使用场景
设计模式 对各种面向对象方法的一种总结.前辈们遇到了好多设计问题,然后利用面向对象解决了.然后他们把解决方案汇总起来,形成了20多种设计模式.它可以有效的帮助我们利用面向对象,来提高代码的复用性. ...
- 设计模式 — 结构型模式 — 代理模式
目录 文章目录 目录 代理模式 应用场景 代码示例 代理模式 代理模式,为其他对象提供一种代理,以此控制一个对象的访问方式.在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户 ...
- C++设计模式 | 四种结构型模式——代理模式、外观模式、适配器模式、装饰模式...
结构型模式:让类和类进行组合,获得更大的结构. 代理模式 代理模式的定义: 为其他对象提供一种代理以控制对这个对象的访问.在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端 ...
- Java接口学习(接口的使用、简单工厂、代理模式、接口和抽象类的区别)
前言引入 官方解释:Java接口是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为(功能). 我的 ...
- Java—接口(工厂模式代理模式)
程序1:简单的接口功能 package com.liaojianya.chapter2; /*** 编写程序实现一个usb接口,定义设备来使用这个接口,从而计算机可以调用具有usb接口的设备.* @a ...
- 工厂模式 代理模式 深入理解
OOP七大原则 开闭原则:对扩展开放,对修改关闭 里氏替换原则:继承必须确保超类所拥有的性质在子类中仍然成立 依赖倒置原则:面向接口编程,不要面向实现编程 单一职责原则:控制类的粒度大小,将对象解耦, ...
- 单例模式 工厂模式 代理模式 适配器模式
单例模式 概念: java中单例模式是一种常见的设计模式,单例模式的写法有好几种,这里主要介绍三种:懒汉式单例.饿汉式单例.登记式单例. 单例模式有以下特点: 1.单例类只能有一个实例. 2.单例类必 ...
- 《设计模式详解》结构型模式 - 代理模式
代理模式 5.1 代理模式 5.1.1 概述 5.1.2 结构 5.1.3 静态代理 5.1.4 动态代理 JDK 动态代理 JDK 动态代理分析 CGLIB 动态代理 5.1.5 三种代理的对比 5 ...
- 设计模式-结构型模式-代理模式proxy
代理模式 三个角色:抽象主题 具体主题 代理类 ( 抽象主题约束) 代理主要是 给某个对象提供一个代理以控制对该对象的访问. 类似于 中介 静态代理 :直接提供代理类,实现与具体主题(被代理类 ...
最新文章
- Nsight Compute Profilier 分析
- MAC下安装多版本JDK和切换几种方式
- 【Python学习】 - anaconda中spyder的常用快捷键总结
- ntp服务器同步时间详细配置
- 二季度美国新增2.4吉瓦太阳能容量
- Maven公共仓库/镜像站收集及使用技巧
- python keyboard库_python库 pywinio虚拟键盘使用
- opencv中的resize函数实现图像插值缩放
- iOS HTML5的JS交互
- 韩语在线翻译图片识别_3个OCR文字识别工具,最后一个许多人都不知道!
- 当“长期主义”遇上“流量生意”,轻松筹与水滴筹谁更胜一筹?
- 2017-2018 ACM-ICPC, Asia Daejeon Regional Contest:Gym 101667C
- win2019微软更新服务器,将 Windows Server 2016 升级到 Windows Server 2019
- SQLServer 自定义函数 日期计算月初/月末/年初/年末/季初/季末
- lua对接bmob数据库
- 什么样的人适合学习嵌入式开发
- Android开发——程序锁的实现(可用于开发钓鱼登录界面)
- RuntimeError: No such operator aten::cudnn_convolution_backward_weight
- promise的前世来生
- 【Linux】限制进程的CPU使用率
热门文章
- 产品配件清单查询示例.sql
- RMAN准备目录数据库
- 如何解决Could not load file or assembly ‘xxx.yyy, version=1.0.0.0, culture=neutral, public
- android编译集成dialer应用,Android Dialer应用程序
- java绘制杨辉三角
- 元宇宙的六大核心技术
- Reason given for failure: CSRF cookie not set.
- 关于公钥、私钥和 CA 认证的小故事
- vue2封装Affix组件实现固定
- Python进行远程视频监控