• 设计模式面试题


    什么是设计模式

    设计模式是一套经过反复使用的代码设计经验,目的是为了更好的复用代码,增加代码的阅读性,保证代码的可靠性和健壮性。每种模式都有相应的原理来与之对应,都是我们在现实编程中可能会遇到的问题,以及问题的解决方案,这就是为什么设计模式被广泛使用的原因。

    为什么要使用设计模式?

    为了更好的使用java的三大特性:封装,继承,多态。通过不同的封装继承方式,定义了23中经典的使用案例作为规范,这就是23中设计模式。这样做的可以更好的提高代码的复用性、扩展性,并且减少冗余代码。

    设计模式六大原则

    开闭原则:

    • 是OOP(面向对象编程)中最基础的原则;
    • 简单来说就是对扩展开放(对提供方),对修改关闭(对使用方)
    • 在开发过程中,当需要方法需要变化时,尽量使用扩展的方法来变化,不要修改软件已有的代码,现有的能力。

    单一职责

    一个类或者一个方法,只负责一类职责。在修改的时候可以控制变化的范围,使用的时候可以降低代码冗余,以及耦合度,避免使用者引入多余的对象。

    依赖倒置

    当不同层级相互依赖的时候,应该依赖的是接口和抽象,而不应该依赖具体的实现类。这个可以结合开闭原则来理解,这样可以降低实现模块和客户的耦合度。

    接口隔离

    引入一个接口的时候,要尽量保证这个接口中的所有方法都是有用的。这个可以结合单一职责来理解,保证接口的职责单一,使用的时候就可以减少引入无用的方法。

    比如:A接口中有6个方法,但是B只用到其中3个方法,C用到其中另外3个方法,就可以把A接口拆成A1和A2,每个里面只有3个方法。满足B和C的最低需要就可以了。

    里氏替换

    任何基类出现的地方,都可以使用子类替换。

    这个是对开闭原则的补充,只有当基类可以被衍生类替换的,并且功能不受影响的时候,基类才能真正被复用。

    并且可以约束继承泛滥,加强程序健壮性。

    迪米特原则

    也叫最少知道原则,一个类应该对其他类尽量保持最少得了解,尽量减少相互作用。使各个模块之间相互独立,这样可以降低耦合度。类与类之间的关系越密切,那么耦合度就越大;

    合成复用

    有的说这个是OOP的原则,有的说这个也是设计模式的原则。

    尽量使用对象组合,而不是继承来达到复用的目的。

    在一个新的对象里,通过关联关系(即合成或者聚合)使之成为新对象的一部分能力。新对象通过调用委派的方式来实现复用的目的。

    组合/聚合可以使系统更加灵活,降低类与类之间的耦合度,避免滥用继承造成方法污染和方法爆炸。

    方法污染指子类父类的行为传递给子类,但是子类并不具备执行此行为的能力。
    方法爆炸指继承树不断扩大,底层方法过于繁杂,导致选择时候容易选错。

    设计模式的分类

    创建型结构

    共5种
    工厂方法模式,抽象工厂模式,单例模式,建造者模式,原型模式

    结构型模式

    共7种:
    适配器模式,装饰器模式,代理模式,桥接模式,外观模式,组合模式,享元模式

    行为模式

    共11种:
    策略模式,模板方法模式,观察者模式,责任链模式,访问者模式,中介者模式,迭代器模式,命令模式,状态模式,解释器模式,备忘录模式

    未完待续

  • 相关阅读:
    设计模式-装饰模式
    Golang学习之路3-基础认识(下)
    羧甲基-β-环糊精/Fe3O4纳米复合物|聚苯胺/TiO2-Fe3O4二元纳米复合物|PAn/TiO2/Fe3O4聚苯胺(PAn)微米纤维材料
    Vue70-路由的几个注意点
    IC Compiler指南——布图规划(一)
    【Python小项目之Tkinter应用】随机点名/抽奖工具大优化:实现背景图与其他组件自适应窗口大小变化并保持相对位置和比例不变
    C++类中函数重写(成员函数覆盖)
    基于Java+SpringBoot+Vue前后端分离周边游平台设计和实现
    网络传输中的重要参数-谈谈带宽
    nginx(五十七)ngx_http_upstream模块(二)一致性hash算法
  • 原文地址:https://blog.csdn.net/weixin_41011482/article/details/126258896