面向对象(一)

忌过程耦合,忌封装性差,

三个原则,一是封装,二是继承,三是多态

注意保护,类的私有成员变量。

SOLID原则

单一,开闭,里氏替换,接口分离,依赖倒置

私有成员,内部状态

构造注入

属性注入

方法参数注入

属性返回内部状态

方法返回内部状态

类,明确用途

生命周期,何时创建,状态变化,何时销毁

关联哪些资源,资源的状态变化

很难找到修改点,修改就容易引入BUG

单一职责SRP

分解长方法,移至短小方法

switch单独一个方法

提取方法之后,重新命名方法內变量,参数的名字

提取方法之后,观察方法內依赖的对象,方法的意图,思考方法是否仍然属于当前类的职责。

多数情况下,方法依赖什么对象,简单来说,方法的参数,是什么对象,那么方法就应该存在于那个对象所在的类中。

在将方法移动到依赖对象类中后,可能参数不再需要,方法名字继续变化,根据实际进行调整测试通过。

对于循环內多行语句,多个职责,可以考虑提取方法,每个方法都进行循环,执行单个职责。

switch语句不要用在另一个对象的某个属性上,最好在属性自己所在对象上使用switch

方法再次移动到某个类后,可能需要原类属性作为传入参数调整。

始终记住,职责,意图,单一职责,单一意图

我们将方法都归位之后,通俗讲就是,方法足够小,并居住在他应该在的类中。

我们要开始考虑继承了。。。。

通常适合继承的是,类型,有多少种类型呢,换句话说,有多少个子类呢?

有了继承,子类的关系,我们就可以利用多态,替换掉 switch 判断。

多态,往往更能表达灵活清晰的条件逻辑,switch 判断,if else 判断。

重复代码。

相同的程序结构。

同一个类中,两个方法有相同的代码逻辑。

两个类,兄弟子类,含有相同的类似代码逻辑,提取出来,放到父类。这时候,有多个选择,父类一个方法,父类一个默认实现,子类重写,父类做一个模板方法模式,子类重写等。

两个毫不相干的类,出现重复类似代码。提取出来,放在一个新类里面。

方法太长

方法內的相同功能逻辑块,if,switch,while 等,这些都是可以提取为更小方法的信号。

过大的类

参数过多

一个原则,方法的参数,应该大多数可以在其宿主类中获得。

参数实在太多,应该传递对象参数。

代码发散式变化

代码散乱式变化

依恋情节

将数据和对数据的操作行为包装在一起。

有个方法,过多的使用另外一个类数据,方法。此时应该把这个方法移动到那个类。

数据泥团

a字段,b字段总是一起出现,a参数,b参数总是一起出现,

这种情况,就需要为a,b封装一个对象

临时变量,不要重复赋值,重复赋值,说明变量的意图改变,当然除了在循环中。

不要给方法参数赋值。

返回值有多个,的方法,思考分隔为几个小方法,思考返回一个对象。

你可能感兴趣的:(面向对象(一))