【Java经典面试题系列】2.16道设计模式面试题

本文介绍了设计模式的基本原则,包括开闭原则、单例模式、代理模式等,并详细讲解了简单工厂、工厂方法、抽象工厂、适配器、装饰器、策略和模板模式。此外,还探讨了动态代理与装饰器模式的区别,以及观察者模式的应用。
摘要由CSDN通过智能技术生成

Q1:设计模式有哪些原则?

开闭原则: OOP 中最基础的原则,指⼀个软件实体(类、模块、⽅法等)应该对扩展开放,对修改关

闭。强调⽤抽象构建框架,⽤实现扩展细节,提⾼代码的可复⽤性和可维护性。

单⼀职责原则: ⼀个类、接⼝或⽅法只负责⼀个职责,降低代码复杂度以及变更引起的⻛险。

依赖倒置原则: 程序应该依赖于抽象类或接⼝,⽽不是具体的实现类。

接⼝隔离原则: 将不同功能定义在不同接⼝中实现接⼝隔离,避免了类依赖它不需要的接⼝,减少了接

⼝之间依赖的冗余性和复杂性。

⾥⽒替换原则: 开闭原则的补充,规定了任何⽗类可以出现的地⽅⼦类都⼀定可以出现,可以约束继承

泛滥,加强程序健壮性。

迪⽶特原则: 也叫最少知道原则,每个模块对其他模块都要尽可能少地了解和依赖,降低代码耦合度。

合成 **/****聚合原则:**尽量使⽤组合(has-a)/聚合(contains-a)⽽不是继承(is-a)达到软件复⽤的⽬的,避免滥

⽤继承带来的⽅法污染和⽅法爆炸,⽅法污染指⽗类的⾏为通过继承传递给⼦类,但⼦类并不具备执⾏

此⾏为的能⼒;⽅法爆炸指继承树不断扩⼤,底层类拥有的⽅法过于繁杂,导致很容易选择错误。

Q2:设计模式的分类,你知道哪些设计模式?

创建型: 在创建对象的同时隐藏创建逻辑,不使⽤ new 直接实例化对象,程序在判断需要创建哪些对

象时更灵活。包括⼯⼚/抽象⼯⼚/单例/建造者/原型模式。

结构型: 通过类和接⼝间的继承和引⽤实现创建复杂结构的对象。包括适配器/桥接模式/过滤器/组合/

装饰器/外观/享元/代理模式。

⾏为型: 通过类之间不同通信⽅式实现不同⾏为。包括责任链/命名/解释器/迭代器/中介者/备忘录/观

察者/状态/策略/模板/访问者模式。

Q3:说⼀说简单⼯⼚模式

简单⼯⼚模式指由⼀个⼯⼚对象来创建实例,客户端不需要关注创建逻辑,只需提供传⼊⼯⼚的参数。

适⽤于⼯⼚类负责创建对象较少的情况,缺点是如果要增加新产品,就需要修改⼯⼚类的判断逻辑,违

背开闭原则,且产品多的话会使⼯⼚类⽐较复杂。

Calendar 抽象类的 getInstance ⽅法,调⽤ createCalendar ⽅法根据不同的地区参数创建不同的

⽇历对象。

Spring 中的 BeanFactory 使⽤简单⼯⼚模式,根据传⼊⼀个唯⼀的标识来获得 Bean 对象。

Q4:说⼀说⼯⼚⽅法模式

⼯⼚⽅法模式指定义⼀个创建对象的接⼝,让接⼝的实现类决定创建哪种对象,让类的实例化推迟到⼦

类中进⾏。

客户端只需关⼼对应⼯⼚⽽⽆需关⼼创建细节,主要解决了产品扩展的问题,在简单⼯⼚模式中如果产

品种类变多,⼯⼚的职责会越来越多,不便于维护。

Collection 接⼝这个抽象⼯⼚中定义了⼀个抽象的 iterator ⼯⼚⽅法,返回⼀个 Iterator 类的抽象产

品。该⽅法通过 ArrayList 、HashMap 等具体⼯⼚实现,返回 Itr、KeyIterator 等具体产品。

Spring 的 FactoryBean 接⼝的 getObject ⽅法也是⼯⼚⽅法。

Q5:抽象⼯⼚模式了解吗?

抽象⼯⼚模式指提供⼀个创建⼀系列相关或相互依赖对象的接⼝,⽆需指定它们的具体类。

客户端不依赖于产品类实例如何被创建和实现的细节,主要⽤于系统的产品有多于⼀个的产品族,⽽系

统只消费其中某⼀个产品族产品的情况。抽象⼯⼚模式的缺点是不⽅便扩展产品族,并且增加了系统的

抽象性和理解难度。

java.sql.Connection 接⼝就是⼀个抽象⼯⼚,其中包括很多抽象产品如 Statement、Blob、Savepoint

等。

Q6:单例模式的特点是什么?

单例模式属于创建型模式,⼀个单例类在任何情况下都只存在⼀个实例,构

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

凌风_Java高性能架构

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值