- 以类取代类型码 -- 类型码不影响类的行为
类型码是纯粹的数据时(也就是类型码不会在switch语句中引起行为变化时)才能以类来取代它
如:人的血型,这是人的一个基本属性,并不会影响人的升职,喝酒,吃饭等行为
- 以子类取代类型码 -- 类型码不可变,并且会影响类的行为
类型码不会影响宿主类的行为
如果有以下两种情况,则不能这样做
(1) 类型码值在对象创建之后发生了改变
(2) 类型码宿主类已经有了子类
还是再如 人的血型,如果是血型不同,性格不同,然后吃饭时间点不同,即一个人的血型不会改变,但是血型会影响人吃饭的时间,那么可以创建子类:A型血person,B型血person,O型血person 等
- Replace type code with state/strategy
类型码的值在对象生命周期中发生了变化,或者宿主类不能被继承
比如person 的职位,根据职位不同 薪水不同
Person 的对象创建完成后 可以 改变职位,那么薪水也会随着改变
对象不能改变,那么对象调用获取薪水的方法也不会改变
用state/strategy 就是为了能够动态的改变对象的行为