语文建设网站,wordpress 帝国 seo,深圳制作网站流程,百度引擎搜索入口定义 一个类只负责一项职责 职责扩散 什么叫职责扩散#xff0c;就是职责再进行细化#xff0c;就拿公司来说#xff0c;好比客户的需求#xff0c;需求是不断变化的#xff0c;而且存在极大的不确定性#xff0c;说不定哪天上司找到你要重新细化某个需求 所以最好在职责…定义 一个类只负责一项职责 职责扩散 什么叫职责扩散就是职责再进行细化就拿公司来说好比客户的需求需求是不断变化的而且存在极大的不确定性说不定哪天上司找到你要重新细化某个需求 所以最好在职责扩散到我们无法控制的程度之前立刻对代码进行重构 栗子 我们先下面这段代码 class Animal:def __init__(self,name):self.name namedef breathe(self):print(%s用肺呼吸%self.name)niu Animal(小奶牛)
zhu Animal(小白猪)niu.breathe()
zhu.breathe()我们很快就能从上面代码中发现一些逻辑上的错误因为不是所有的动物都是用肺呼吸有的使用腮呼吸的应该将Animal类细分为陆生动物类Terrestrial水生动物类Aquatic代码如下 class Animal:def __init__(self,name):self.name nameclass Terrestrial(Animal):def breathe(self):print(%s 用肺呼吸%self.name)class Aquatic(Animal):def breathe(self):print(%s 用腮呼吸%self.name)c Terrestrial(小花猫)
c.breathe()fish Aquatic(美人鱼)
fish.breathe()我们看到上面代码的实现就是动物类分出两类并把呼吸的方法写入的派生类里好这样做是没问题的那看看下面这段代码 class BreatheBehavior:def breathe(self):passclass LungBreathe(BreatheBehavior):def breathe(self):print(用肺呼吸)class CheekBreathe(BreatheBehavior):def breathe(self):print(用腮呼吸)class Animal:def __init__(self,name,breatheP):self.name nameself.BreatheParam breathePdef performBreathe(self):self.BreatheParam.breathe()class Terrestrial(Animal):def __init__(self,name,breathePLungBreathe()):super(Terrestrial,self).__init__(name,breatheP)class Aquatic(Animal):def __init__(self,name,breathePCheekBreathe()):super(Aquatic,self).__init__(name,breatheP)c Terrestrial(小花猫)
c.performBreathe()fish Aquatic(美人鱼)
fish.performBreathe()我们发现第二种方式则像是用接口的形式实现了某个行为的类化你可能会想第二种方法的代码实现明显长的多我为什么要用第二种方式。 在今天的这个例子毫无疑问是第一方法简单那我们先来看看用单一职责原则的目的吧 目的可以降低类的复杂度一个类只负责一项职责其逻辑肯定要比负责多项职责简单的多提高类的可读性提高程序的可维护性变更引起的风险降低变更是必然的如果单一职责原则遵守的好当修改一个功能时可以显著降低对其他功能的影响单一职责原则同时也适用于模块化的程序设计 好所以单一职责的核心无非就是降低复杂度和提高可读性以及可扩展性假如你把要动物的种类细化再细化按照第一种方法--你是不是要在派生类重写多个呼吸方法但是动物的呼吸方式无非就是这几种所以第二种方法更适合复杂的场合所以每种方法因场景而异自己把握 欢迎大家对我的博客内容提出质疑和提问谢谢 笔者拍省先生 转载于:https://www.cnblogs.com/xinsiwei18/p/5699599.html