您的位置 首页 golang

「面试必问系列」单一职责原则

前言

在每次招聘时,发现大家对于数据结构、算法掌握的都还算不错,但是一问到设计模式时,大部分同学还停留在死记硬背阶段,一问到理解或者实际写代码就暴露出了这个问题

所以我准备写一些关于设计模式的文章,帮助大家在面试中脱颖而出,offer拿到手软!!!

记得先关注哦~

面试开始

面试官 :了解过面向对象么?说说什么是单一职责原则吧

小嘿: 单一职责原则,就是一个类应该只有一个能引起它变化的原因

面试官: (感觉这哥们就是靠背啊,我得看看他背了多少)嗯,那么使用单一职业原则有哪些好处呢?

小嘿: 首先类的复杂度降低、每个类的分工明确。这样一来程序的可读性得到大大的提高,并且在后续PM提优化需求时,代码改动量较小,每次只改一个类就可以了

面试官:(哎呦,看着还行,再问问他看看他对这件事的理解咋样) 嗯。这样吧,你给一个照相机来设计一个接口吧,照相机只支持,拍照片功能

小嘿: (这秃子肯定要重点考我单一职责啊,这还不简单) 好。我会这样写这个接口。

 type ICamera interface { 
    // 拍照方法 
    func photograph()  
    // 保存方法  
    func save() 
}    

面试官: 好。那么如果这时候需要新增一个录像功能,那么你的应该变成什么呢?

小嘿:(挠了挠头) 嗯,我想想,如果是这样的话,应该把接口拆分,变成这样

 type ICameraPhoto interface { 
    // 拍照方法 
    func photograph()  
    // 拍视频方法  
    func video() 
}  
type ICameraSave interface { 
    // 保存方法 
    func save() 
}   

面试官: 嗯。那如果这时候需要新增一个【设置闪光灯功能】呢?拍照和拍视频可能都会用到,并且在【下次开机的时候,上次的设置】依然生效。也就是说在关机之前设置未开启闪光灯,那么下次开机还是应该默认开启闪光灯。

小嘿: 嗯,那么我会在ICameraPhoto接口中的photograph方法和video方法分别增加一个参数,来设置闪光灯。

面试官: 好,那如果我在想加一个调焦功能呢?

小嘿: 如果是这样的话,我会跟闪光灯一样,分别在两个方法中新增一个参数,来调整焦距。就像这样

 type ICameraPhoto interface { 
    // 拍照方法 
    func photograph(light int, focalize int)  
    // 拍视频方法  
    func video(light int, focalize int) 
}  
type ICameraSave interface { 
    // 保存方法 
    func save() 
}   

面试官:(皱了皱眉头) 那如果我再加一个滤镜功能,你是不是也同样会在两个方法中新增参数呢?

小嘿:(卧槽,看他那个扑克脸,我是不是设计错了,我再想想) 面试官你好,我在想想。

面试官心想,这小子还行,至少这小子不会张嘴就瞎说,知道过过脑子。

小嘿(大概想了几分钟): 面试官你好,我发现我可以再拆分一个设置接口。就像这样。

 type ICameraSetting interface { 
    // 设置闪光灯 
    func Light() 
    // 设置焦距 
    func focalize() 
    // 设置滤镜
    func FilterMirror() 
} 
type ICameraPhoto interface { 
    // 拍照方法 
    func Photograph(light int, focalize int)  
    // 拍视频方法  
    func Video(light int, focalize int) 
}  
type ICameraSave interface { 
    // 保存方法 
    func Save() 
}   

面试结束

面试官:好的,一轮面试就到这,稍微等我一下,我去找一下二面的面试官

小嘿脸上一本正经,心里像吃了蜜一样~

总结

单一职责原则提出了一个写代码的规范,其中最难的就是划分职责,而划分职责通常都没有唯一的标准答案,最适合项目的设计,就是最好的设计模式

后续我会在出一下设计模式系列,尽可能地通俗易懂,帮助大家理解和掌握关于【设计模式的面试技巧】。记得关注哦~

文章来源:智云一二三科技

文章标题:「面试必问系列」单一职责原则

文章地址:https://www.zhihuclub.com/101838.shtml

关于作者: 智云科技

热门文章

网站地图