• [面试直通版]设计模式-2-


    目录

    装饰器模式

    解决问题:

    为什么需要装饰器模式

    装饰器模式的实现方式

    装饰器模式的优劣

    代理模式

    解决问题:

    为什么需要代理模式

    代理模式的实现方式

    代理模式的优劣

    设计模式的七大原则

    开闭原则

    里氏替换原则

    依赖倒置原则

    单一职责原则

    接口隔离原则

    迪米特法则

    合成复用原则


    • 装饰器模式

    • 解决问题:

    • 为什么需要装饰器模式
    • 装饰器模式的实现方式
    • 装饰器模式的优劣
    • 为什么需要装饰器模式

    • 定义:
    • 指在不改变现有对象结构的情况下,动态地给该对象增加一些职责(即增加其额外功能)的模式
    • 为什么:
    • 在软件开发过程中,有时想用一些现存的组件
    • 这些组件可能只是完成了一些核心功能
    • 但在不改变其结构的情况下,可以动态地扩展其功能
    • 所有这些都可以釆用装饰器模式来实现
    • 装饰器模式的实现方式

    • 创建一个 Shape 接口和实现了 Shape 接口的实体类
    • 然后创建一个实现了 Shape 接口的抽象装饰类 ShapeDecorator,并把 Shape 对象作为它的实例变量
    • RedShapeDecorator 是实现了 ShapeDecorator 的实体类
    • DecoratorPatternDemo 类使用 RedShapeDecorator 来装饰 Shape 对象
    • 装饰器模式的优劣

    • 优:
    • 装饰器是继承的有力补充,比继承灵活
    • 不改变原有对象的情况下动态的给一个对象扩展功能,即插即用
    • 通过使用不用装饰类及这些装饰类的排列组合,可以实现不同效果
    • 劣:
    • 装饰器模式会增加许多子类、过度使用会增加程序的复杂性
    • 代理模式

    • 解决问题:

    • 为什么需要代理模式
    • 代理模式的实现方式
    • 代理模式的优劣
    • 为什么需要代理模式

    • 定义:
    • 由于某些原因需要给某对象提供一个代理以控制对该对象的访问
    • 这时,访问对象不适合或者不能直接引用目标对象,代理对象作为访问对象和目标对象之间的中介
    • 为什么:
    • 一个客户不能或者不想直接访问另一个对象,这时需要找一个中介帮忙完成某项任务,这个中介就是代理对象
    • 例如,购买火车票不一定要去火车站买,可以通过12306网站或者去火车票代售点买
    • 代理模式的实现方式

    • 点击->Proxy-静态代理<-点击
    • 点击->Proxy-动态代理<-点击
    • 代理模式的优劣

    • 优:
    • 在客户端与目标对象之间起到一个中介作用和保护目标对象的作用
    • 代理对象可以扩展目标对象的功能
    • 在一定程度上降低了系统的耦合度,增加了程序的可扩展性
    • 劣:
    • 代理模式会造成系统设计中类的数量增加
    • 增加一个代理对象会造成请求处理速度变慢
    • 增加了系统的复杂度
    • 设计模式的七大原则

    • 开闭原则

    • 当应用的需求改变时,在不修改软件实体的源代码或者二进制代码的前提下,可以扩展模块的功能,使其满足新的需求
    • 对软件测试的影响
    • 提高代码的可复用性
    • 提高代码的可维护性
    • 里氏替换原则

    • 里氏替换原则通俗来讲就是:子类可以扩展父类的功能,但不能改变父类原有的功能
    • 具体些:
    • 子类可以实现父类的抽象方法,但不要覆盖父类的非抽象方法
    • 子类可以实现子类特有的方法
    • 子类重载父类方法时,方法的输入一定要比父类方法更宽松
    • 子类实现父类方法时,方法的输出一定要比父类方法更加严格
    • 依赖倒置原则

    • 依赖倒置原则的原始定义为:高层模块不应该依赖低层模块,两者都应该依赖其抽象;
    • 抽象不应该依赖细节,细节应该依赖抽象,要面向接口编程,不要面向实现编程
    • 依赖倒置原则可以降低类之间的耦合性
    • 依赖倒置原则可以提高系统的稳定性
    • 依赖倒置原则可以减少并行开发引起的风险
    • 依赖倒置原则可以提高代码的可读性和可维护性
    • 单一职责原则

    • 单一职责原则规定一个类应该有且仅有一个引起它变化的原因,否则类应该被拆分
    • 降低类的复杂度
    • 提高类的可读性
    • 提高系统的可维护性
    • 变更引起的风险降低
    • 接口隔离原则

    • “接口隔离原则”的定义是:客户端不应该被迫依赖于它不使用的方法
    • 提高系统的灵活性和可维护性
    • 提高了系统的内聚性
    • 保证系统的稳定性
    • 减少项目工程中的代码冗余
    • 迪米特法则

    • 如果两个软件实体无须直接通信,那么就不应当发生直接的相互调用,可以通过第三方转发该调用
    • 其目的是降低类之间的耦合度,提高模块的相对独立性
    • 降低了类之间的耦合度,提高了模块的相对独立性
    • 提高了类的可复用率和系统的扩展性
    • 过度使用迪米特法则会使系统产生大量的中介类
    • 增加系统的复杂性,降低模块之间的通信效率
    • 合成复用原则

    • 合成复用原则要求在软件复用时,要尽量先使用组合或者聚合等关联关系来实现,其次才考虑使用继承关系来实现
    • 继承复用破坏了类的封装性
    • 继承使得父类与子类的耦合度过高
    • 组合复用维持了类的封装性,新旧类之间耦合度低
    • 组合复用的灵活性高
  • 相关阅读:
    社区街道治安智慧监管方案,AI算法赋能城市基层精细化治理
    机器学习(七)模型选择
    session共享(redis实现)
    非线性系统的理论和方法,神经网络的非线性
    在 GeoServer 上发布 Shapefile 文件作为 WMS 数据
    计算机毕业设计之java+ssm爱家房屋租赁信息管理系统
    设计模式-外观模式
    【Vue】npm install 命令
    深入理解JVM虚拟机第六篇:内存结构与类加载子系统概述
    Spring boot和Vue.js实现基于oauth2授权码模式的认证 (二)
  • 原文地址:https://blog.csdn.net/weixin_59624686/article/details/127095379