面试官:面对不同的业务需求如何选择设计模式 ?
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。或者公众号
以上是关于面试官:面对不同的业务需求如何选择设计模式 ?的主要内容,如果未能解决你的问题,请参考以下文章