面试官:面对不同的业务需求如何选择设计模式 ?

Posted 初一十五啊

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了面试官:面对不同的业务需求如何选择设计模式 ?相关的知识,希望对你有一定的参考价值。

经常有很多小伙伴在面试中被问到关于设计模式的问题,那么今天就听我细细道来。

我们要明白的是
1.设计模式的概念
2.设计模式的有几个分类,分别是什么
3.每个模式分类中有哪些关键点?
4.概说23种设计模式
5.什么样的业务需要什么样的设计模式?

一、设计模式概念

设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。 毫无疑问,设计模式于己于他人于系统都是多赢的,设计模式使代码编制真正工程化,设计模式是软件工程的基石脉络,如同大厦的结构一样。

即12字真言:设计模式是设计经验的总结

通俗的说,就是解决问题的方法,是前辈们归纳总结出来的便于人们理解使用,增加代码的可维护性、可复用性、可扩展性。

二、设计模式的几个分类

创建型模式:对象实例化的模式,创建型模式用于解耦对象的实例化过程。 结构型模式:把类或对象结合在一起形成一个更大的结构。 行为型模式:类和对象如何交互,及划分责任和算法。

如下图所示

三、每个模式分类中有哪些关键点?

  • 单例模式: 不要存在多于一个导致类变更的原因。通俗的说,即一个类只负责一项职责

  • 简单工厂:一个工厂类根据传入的参量决定创建出那一种产品类的实例。

  • 工厂方法: 定义一个具体功能相关的接口,由子类来决定这么实现。

  • 抽象工厂:创建相关或依赖对象的家族,而无需明确指定具体类。

  • 建造者模式:封装一个复杂对象的构建过程,并可以按步骤构造。

  • 原型模式: 将一个对象作为原型,通过复制的方式,克隆出多个和目标实例类似的新实例。

  • 适配器模式:将一个类的方法接口转换成客户希望的另外一个接口。

  • 组合模式:将对象组合成树形结构以表示“”部分-整体“”的层次结构。

  • 装饰模式:动态的给对象添加新的功能。

  • 代理模式:为其他对象提供一个代理以便控制这个对象的访问。

  • 亨元模式:通过共享技术来有效的支持大量细粒度的对象。

  • 外观模式:对外提供一个统一的方法,来访问子系统中的一群接口。

  • 桥接模式:将抽象部分和它的实现部分分离,使它们都可以独立的变化。

  • 模板模式:定义一个算法结构,而将一些步骤延迟到子类实现。

  • 解释器模式:给定一个语言,定义它的文法的一种表示,并定义一个解释器。

  • 策略模式:定义一系列算法,把他们封装起来,并且使它们可以相互替换。

  • 状态模式:允许一个对象在其对象内部状态改变时改变它的行为。

  • 观察者模式:对象间的一对多的依赖关系。

  • 备忘录模式:在不破坏封装的前提下,保持对象的内部状态。

  • 中介者模式:用一个中介对象来封装一系列的对象交互。

  • 命令模式:将命令请求封装为一个对象,使得可以用不同的请求来进行参数化。

  • 访问者模式:在不改变数据结构的前提下,增加作用于一组对象元素的新功能。

  • 责任链模式:将请求的发送者和接收者解耦,使的多个对象都有处理这个请求的机会。

  • 迭代器模式:一种遍历访问聚合对象中各个元素的方法,不暴露该对象的内部结构。

四丶23种设计模式。

由于内容偏长,这里整理了一个关于23种设计模式的文档。

然后就有小伙伴提出来一个问题: 小明:上次面试官问了如下问题,我该怎么结合以上内容回答,让面试官满意呢?

1.在项目开发中用过什么样的设计模式呢?
2.IOC你熟悉吗?APT和SPI机制呢?
3.设计模式如何指导我们代码实践开发?
4.如何从架构层面设计我们的框架解决项目问题?
5.代码重构中的痛点问题是如何处理的?

本次就手把手带你站在高级工程师的角度,精确分析不同的业务需要什么样的模式做设计,同时也能深度理解在系统设计与APP设计之中,APT,SPI,IOC等流行技术在移动端的实战应用。

主要内容为策略模式与IOC组合实战之APT工作原理与设计模式在大厂项目APP架构设计中的经典实战,设计模式作为每一位程序员都必需的技术,也是一线大厂面试中必问的内容,同时也是项目开发中每一个高级工程师与架构师所精通的知识。

如果你觉得以上的内容,学完还有点意犹未尽?毕竟学无止境。那么还能即时领取一份,【腾讯T10面试笔记文档大全】,内容如下:

即时查看→【腾讯T10面试笔记文档大全+23种设计模式】
GitHub。或者公众号

包含android基础-性能优化-Framework-compose开源项目-音视频初中高-架构-车载-Flutter-Kotlin-鸿蒙+23种设计模式详解。

1.Android基础篇

涉及:注解,泛型,Retrofit,ButterKnife,动态代理和反射原理,AOP,JavaSSit,ASM,虚拟机面试,热修复Tinker.

2.性能优化能力

涉及:启动优化实战,内存优化,启动速度优化,卡顿,布局,崩溃优化及其处理,启动全流程分析(源码深度剖析)

3.Framework

涉及Framework通信,Framework底层服务,Framework事件机制

4.Compose【开源项目】

5.音视频(涉及:C和C++基础语法,H264编码基础和进阶,H265编码原理和应用MediaCodec硬解码,Media内核源码,微信视频通话。初级-中-高)

6.架构

(涉及:Arraylist,Okhttp,Retrofit,图片加载,Dagger 2,MVC.MVP.MVVM,Jetpack Room

7.Android车载工程师

涉及Android Auto,汽车媒体应用,构建Android Auto即时通信应用,构建车载导航和地图注点应用,构建Android Automotive OS视频应用,测试Android车载应用,分发Android汽车应用,适用于汽车的Google Play服务,Android Automotive OS的通知

8.Flutter*

涉及Dart语法,Flutter动画丶组件丶网络请求以及Flutter3.0简介。

9.鸿蒙相关

涉及Ability组件,分布式任务,事件总线,鸿蒙线程,UI自定义控件

10.Kotlin

涉及:对象.类.继承.变量.常量.拓展.函数等二十多个内容

从事互联网开发,最主要的是要学好技术 而学习技术是一条慢长而艰苦的道路,不能靠一时激情,也不是熬几天几夜就能学好的 必须养成平时努力学习的习惯,更加需要准确的学习方向达到有效的学习效果

希望大家都能够拿到心仪的offer,一起升职加薪😊!
GitHub。或者公众号

以上是关于面试官:面对不同的业务需求如何选择设计模式 ?的主要内容,如果未能解决你的问题,请参考以下文章

面试官:系统需求多变时如何设计?

面试官:系统需求多变时如何设计?

面试官:数据库日期类型字段,需要兼容不同数据库,应该如何选择?

字节跳动面试官问:微服务下如何保证分布式事务的最终一致性?

设计一个电商平台的积分兑换系统

面试官问:微服务下有几种保证分布式事务最终一致性的方案?