前言
- 我想提取框架
- 在完成一把枪械的逻辑后,抽取该枪械逻辑的结构关系,形成枪械的代码结构框架
- 抽象高于实现, 应该在抽象出来的代码结构内,去完成针对性的实现逻辑
- 抽象的约束,即有了约束和规范
- 多态的三种形式 虚方法 接口,抽象类,
议论
- 虚方法无法起到约束的作用,子类可以重写,也可以选择不重写
- 抽象类可以起到约束的作用
接口
- 对于接口,我们可以将共有的字段和属性封装到一个普通的父类中
- 然后将抽象方法封装成一个独立的接口
- 子类在继承父类的基础上,去实现对应的功能接口
- 接口是不能继承MonoBehaviour
抽象类
- 抽象类可以包含非抽象成员
- 抽象类可以继承MonoBehaviour
- 抽象类中的抽象方法,子类必须全部实现
- 抽象类不能挂载到物体上
总结
- 抽象类和接口都能完成我们的需求,但是接口是在抽象类的基础上进一步的分离抽象,进一步的职责单一化
抽象思路
- 对于V层的提取
- 字段,属性提取到父类
- 父类定义一个抽象的初始化方法,并且在父类的Awake方法内调用
- 由子类完成该方法的具体方法体
- (即父类管理了该方法什么时候进行调用,子类继承父类,只需要完成该方法的方法体即可,其余的不需要子类管理)
- 对于C层的提取
- 子类和子类交互
- 我们把枪械逻辑分成了V和C两层,C层需要访问V层,V和C都分割成了父子结构,父类需要持有父类的引用
- 在C层子类不需要查找V层子类,可以直接类型转换
- 在子类中定义V层子类的引用字段
- 将C层父类中V层父类引用向下转型
- 我们只需要在父层进行查找即可,子类对其进行向下转型
- V层用Awake,C层用Start
- 虚方法Start()
- 目前子类的Start方法,需要手动调用执行父类的Start
- 将父类的Start写成虚方法,然后子类进行重写(可以保证我们调用父类的Start)
- 约束子类初始化格式
-
在父类中定义一个Init抽象方法,并且在父类中调用;
-
子类实现该方法的方法体,完成子类初始化
-
子类的Start方法就不需要再写(这个时候在子类中就没有生命周期方法了)
-
注意事项
-
- 由于子类和父类都是用Awake进行脚本初始化的,涉及到执行顺序,需要将父类的Awake方法公开,在子类的Awake方法内调用执行父类的Awake方法