我在重构代码的时候,她又跑来了,兴奋的和我说:我在小区里看到一只超可爱的猫,我还拍了照片,你看,说着把那张图片贴我脸上.
我看了看她,笑了笑,对她说:要不我们也养只猫?她说好呀好呀,等我哪天遇到流浪猫.我就把它带回来
我说:嗯
她看了看我的电脑,又看了看我,叹了口气说:不好弄吗?
我说:就是日常重构代码,也没啥,没有卡住,现在这种模式也能用.
她又问我,你为什么隔三岔五的,就要去重构代码呢?
我回答她说:重构就是改善一下现有的设计,但是又不能过度的去设计,所以有的时候就要取舍一下,是不是应该要重构.
她说:哦,这次你想重构哪里的?
我说:上次我们一起设计的武器类,父类封装,子类调用,但是在开火的那里,好像并不是很好用,因为每个武器的属性不一样,特效,声音,伤害等等等等.如果代码一多,容易乱.
她想了想,开始沉默,我很喜欢她考虑的表情.撅着嘴,好像有什么事不开心的样子.正当我被她迷住,想去拥抱她,她忽然好像想到了什么一样,兴奋的说:如果我们在父类中就
写好流程了呢?这样每个武器是不是就都是一个流程了,只需要每个武器单独设置特效声音不就行了吗?
我愕然,没错,但是这要怎么做呢?我思考了一会,大概知道她是怎么想的了
不由得感叹,如果她要是程序员,一定比我强,说到这里,我想到了世界上第一位程序员就是一位女性.
首先,在父类中写好方法流程,然后在子类中重写,最后在调用的时候就可以修改它的属性:
using UnityEngine;
public abstract class AbstractClass
{
public void TemplateMethod() {
PrimitiveOpration1();
PrimitiveOpration2();
}
protected abstract void PrimitiveOpration1();
protected abstract void PrimitiveOpration2();
}
public class ConcreteClassA : AbstractClass
{
protected override void PrimitiveOpration1()
{
//throw new System.NotImplementedException();
Debug.Log("PrimitiveOpration1 in ConcreteClassA");
}
protected override void PrimitiveOpration2()
{
//throw new System.NotImplementedException();
Debug.Log("PrimitiveOpration2 in ConcreteClassA");
}
}
public class ConcreteClassB : AbstractClass
{
protected override void PrimitiveOpration1()
{
//throw new System.NotImplementedException();
Debug.Log("PrimitiveOpration1 in ConcreteClassB");
}
protected override void PrimitiveOpration2()
{
//throw new System.NotImplementedException();
Debug.Log("PrimitiveOpration2 in ConcreteClassB");
}
}
然后在unity中对它进行调用:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class UseInUnity11 : MonoBehaviour
{
AbstractClass ConcreteA = new ConcreteClassA();
AbstractClass ConcreteB = new ConcreteClassB();
// Start is called before the first frame update
void Start()
{
ConcreteA.TemplateMethod();
ConcreteB.TemplateMethod();
}
// Update is called once per frame
void Update()
{
}
}
她又问:这次这个方法下次你还会重构掉吗?
我笑了笑,对她说:怎么会呢傻瓜.她说上次不也是我和你一起设计的吗,这次不也改了,骗人,说完气呼呼的回到自己的房间里去了.我在书房不知道为什么她会生气,不过有一点可以肯定的是,一定是我错了.