首页 > 其他分享 >设计模式学习纪要(三)

设计模式学习纪要(三)

时间:2024-03-19 17:31:12浏览次数:22  
标签:对象 适配器 代理 模式 public 学习 设计模式 lawyerService 纪要

(五)代理模式(结构型模式)

代理模式定义

代理模式就是为一个对象(被代理对象)提供一个代理对象,并且通过代理对象控制对原来被代理对象的访问。可以简单理解为通过代理对象访问目标对象。这样做最大的好处就是可以在目标对象实现的基础上,增强额外的功能,起到扩展目标对象的效果。

代理模式优缺点
优点
  1. 职责清晰,具体的实现对象只需要关注实际的业务逻辑,不关心其他非本职事务,可以通过后期的代理完成一件事务;
  2. 扩展性好,可以在不修改原实现对象的基础上进行功能扩展;
  3. 代理模式将客户端和对象进行分离,一定程度上降低了耦合性;
缺点
  1. 代理模式会增加系统设计中的类数量,增加了系统的复杂度;
  2. 在客户端和目标用户之间新增一个代理对象,会造成请求处理速度慢;
代理模式类图
静态代理

在这里插入图片描述

动态代理

在这里插入图片描述

代理模式适用场景
  1. 在非入侵情况下进行某个实现类的方法增强可以使用代理模式;
  2. Spring的AOP使用了代理模式;
代理模式实现方式

功能类接口与实现类

public interface LawyerService {
    void caseResearch();
    void quote();
}
public class LawyerServiceImpl implements LawyerService{
    @Override
    public void caseResearch() {System.out.println("进行案件调研");}
    @Override
    public void quote() {System.out.println("进行报价");}
}

静态代理类

public class LawyerProxy {
    private Object lawyerService;
    public LawyerProxy(Object lawyerService) {
        this.lawyerService = lawyerService;
    }
    public void caseResearch() {
        System.out.println("调用代理类");
        lawyerService.caseResearch();
        System.out.println("代理结束");
    }
}

动态代理类

public class LawyerProxy {
    public static Object getLawyerProxy(Object lawyerService) {
        return Proxy.newProxyInstance(lawyerService.getClass().getClassLoader(),
                lawyerService.getClass().getInterfaces(),
                (Object proxy, Method method, Object[] args) ->{
            System.out.println("代理前处理");
            // 通过反射进行原方法执行
            Object invoke = method.invoke(lawyerService, args);
            System.out.println("代理后处理");
            return invoke;
        });
    }
}

使用者

public class Main {
    public static void main(String[] args) {
        // 静态代理调用
//      LawyerProxy lawyerProxy = new LawyerProxy(new LawyerServiceImpl());
//      lawyerProxy.caseResearch();
        // 动态代理调用
        LawyerService lawyerProxy = (LawyerService) LawyerProxy.getLawyerProxy(new LawyerServiceImpl());
        lawyerProxy.caseResearch();
    }
}

(六)适配器模式(结构型模式)

适配器模式定义

适配器模式就是将一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作。

适配器模式优缺点
优点
  1. 提高类的复用性,原类可以继续使用,新类通过适配进行工作;
  2. 提高了系统的灵活性,可以灵活的进行原系统的功能适配;
缺点
  1. 适配器编写过程中会增加系统的复杂程度;
  2. 降低代码的可读性,过多使用适配器会使系统变得凌乱;
适配器模式类图

在这里插入图片描述

适配器模式适用场景
  1. 在已有系统中进行系统扩展,新的扩展需求的接口或者类不满足原系统的接口/类,为减少系统改动,新增适配器进行相关适配。
适配器模式实现方式

原对象与新对象

@Data
@NoArgsConstructor
@AllArgsConstructor
public class User {
    private String name;
    private Integer age;
    private String mail;
    private String address;
}
@Data
@NoArgsConstructor
@AllArgsConstructor
public class ExternalUser {
    private String externalName;
    private String externalAge;
    private String externalMail;
}

适配器和使用者

public class UserAdapter {
    public static User getProvider(ExternalUser externalUser){
        // 将外部对象转换为内部对象
        User user = new User();
        user.setName(externalUser.getExternalName());
        user.setAge(Integer.parseInt(externalUser.getExternalAge()));
        user.setMail(externalUser.getExternalMail());
        return user;
    }
}
public class Main {
    public static void main(String[] args) {
        ExternalUser ll = new ExternalUser("LL", "12", "[email protected]");
        User provider = UserAdapter.getProvider(ll);
        System.out.println(provider);
    }
}

标签:对象,适配器,代理,模式,public,学习,设计模式,lawyerService,纪要
From: https://blog.csdn.net/junlouyu/article/details/136849394

相关文章

  • 记SPF反邮件伪造技术及漏洞利用学习
    通过其他师傅那边了解到了邮件伪造漏洞,于是开始了解SPF反邮件伪造技术以及邮件伪造漏洞利用,特此对学习到的内容做一个梳理。一、SPF概念及配置方式SPF这个东西的全名是发送者策略框架(SenderPolicyFramework,SPF),是一个电子邮件验证的机制。SPF记录实际上是服务器上的一个D......
  • 深度学习-卷积神经网络-目标检测YOLO-v3-推理运行-55
    目录代码仓地址:https://github.com/qqwweee/keras-yolo3.git创建虚拟环境三方件安装Python3.7.5conda4.1.6pip3uninstallkeras-nightlypip3uninstall-ytensorflowpip3installkeras2.1.6pip3installtensorflow1.15.0pip3installh5py==2.10.0pipinsta......
  • 【联邦学习Fate架构讲解】
    1.联邦学习的网络架构P2P网络网络中的每个成员建议通信Star网络网络中的每个成员只需要和中心的exchange交换信息2.FATE中的架构2.1EggRoll分布式计算和存储EggRoll分布式计算和存储存储部分storageservice计算部分processor管理eggmanager2......
  • ESP32学习笔记-双核编程
    写在前面ESP32集成了两个TensilicaXtensaLX6微处理器(核心0和核心1)。FreeRTOS作为ESP32的操作系统,提供了多任务支持,可以使得这两个核心同时工作。在不使用FreeRTOS的情况下,程序默认跑在核心1上,而核心0主要运行WIFI和bluetooth;如果我们的项目不频繁使用WIFI蓝牙,建议使用多......
  • 软考高项学习重点总结整理第1章信息化发展
     以下内容均为作者个人根据“往年软考高项考题”及考试重点整理的选择题重要考点。不喜欢看厚厚书本的友友的福音......
  • 鸿蒙学习笔记-DevEco Studio 安装
    鸿蒙DevEco Studio是开发华为鸿蒙系统必须要安装的开发软件软件下载软件下载地址:HUAWEIDevEcoStudio和SDK下载和升级|华为开发者联盟,根据自己使用的电脑情况,选择对应的下载文件 软件安装下载后的文件是zip压缩包,解压后,打开安装文件,点击Next保持默认选项,点击Next......
  • 面对 Nvidia 的主导地位:非大型科技公司的敏捷机器学习开发策略(在供应和成本挑战中)
    在真正的大玩家中建立游戏业务从来都不是一件容易的事。2023年,在真正令人费解的突破的推动下,人工智能领域的竞争达到了前所未有的高度。OpenAI的发布GPT-4,整合与Bing聊天GPT,谷歌推出诗人,以及Meta备受争议的“开源”骆驼2发布。听起来像是一长串大人物的名......
  • UI自动化测试中公认最佳的设计模式-POM
    p>什么是POM?POM是PageObjectModule(页面对象模式)的缩写,其目的是为了WebUI测试创建对象库。在这种模式下,应用涉及的每一个页面应该定义为一个单独的类。类中应该包含此页面上的页面元素对象和处理这些元素对象所需要的方法等。将流程所关联的页面作为对象,将对象串联起来,形成一个个......
  • 设计模式(行为型设计模式——职责链模式)
    设计模式(行为型设计模式——职责链模式)职责链模式基本定义为了避免请求发送者与多个请求处理者耦合在一起,将所有请求的处理者通过前一对象记住其下一个对象的引用而连成一条链;当有请求发生时,可将请求沿着这条链传递,直到有对象处理它为止。在这里客户端和处理者都没有......
  • 磁盘管理--学习笔记
    磁盘管理--学习笔记磁盘分区磁盘分区组成主分区只能创建4个扩展分区比如安排的工作新买一个硬盘磁盘挂载第一步买硬盘插到物理机第二步分区格式化虚拟机演示新增一个硬盘fdisk常用选项在`fdisk`的交互界面中,提供了很多命令供用户操作:-......