UML
核心思想
1.业务和界面分离
如何分清业务逻辑和界面:
一般显示在界面上的,我们肉眼可见的属于界面,而我们看不见的,内部运算属于业务逻辑
对于一个加减运算来说:
运算过程和法则---->业务逻辑
界面---->我们的输入
2.面向对象的三大法则:封装,继承和多态
我们主要使用继承和多态来实现简单的加减运算,至于为啥需要这两个,我们是如何提炼出来的,我们后文中分解!
具体实现
面对这样一个问题:
思路:
提炼共性:所有的运算都有两个数,然后得到一个结果
于是我们就有了下面的类:
1.继承
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
/// <summary>
/// 计算方法
/// </summary>
public class Oprition
{
private float number_1;
public float Number_1
{
get
{
return number_1;
}
set
{
number_1 = value;
}
}
private float number_2;
public float Number_2
{
get
{
return number_2;
}
set
{
number_2 = value;
}
}
/// <summary>
/// 计算
/// </summary>
/// <param name="bunber1"></param>
/// <param name="number2"></param>
public virtual float GetResult() {
float result = 0;
return result;
}
}
这个类相当于父亲,有若干个儿子,“+”“-”“x”"/"等等,于是有了下面的类:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
/// <summary>
/// 加法
/// </summary>
public class OpritionAdd : Oprition
{
public override float GetResult()
{
float result = Number_1 + Number_2;
return result;
}
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
//减法
public class OpritionSub : Oprition
{
public override float GetResult()
{
float result = Number_1 - Number_2;
return result;
}
}
他们都有一个共性,都属于算法的儿子,所以都需要继承父亲Oprition
2.多态
多态的含义呢:字面意思,同样的对象可以有多重的含义!
对应我们的项目:
运算都需要得到一个结果,那么我们就有一个 GetResult() 的方法,我们想要我们所有的儿子都需要有这个方法,但是他们都是不一样的,那么我们就用到了 多态,多态的用法呢!在c#里面主要是:
virtual和override两个关键字,virtual定义的方法为虚方法,override为重写虚方法
虚方法
/// <summary>
/// 计算
/// </summary>
/// <param name="bunber1"></param>
/// <param name="number2"></param>
public virtual float GetResult() {
float result = 0;
return result;
}
重写
public override float GetResult()
{
float result = Number_1 + Number_2;
return result;
}
简单工厂
工厂的作用
顾名思义:工厂的作用肯定是生产一个对象出来,那么我们生产什么东西呢,对应我们的项目,那么就是生产一个运算(Oprition),至于我们想要生产那种,根据我们的输入和需求来!
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
//工厂
public static class OpritionFactory
{
public static Oprition CreatOperator(string operators)
{
Oprition oprition = new Oprition();
switch (operators)
{
case "+":
oprition = new OpritionAdd();
break;
case "-":
oprition = new OpritionSub();
break;
}
return oprition;
}
}
实验测试
这里是测试代码:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Hello
{
[RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.BeforeSceneLoad)]
static void Main()
{
Oprition oprition = OpritionFactory.CreatOperator("+");
oprition.Number_1 = 10f;
oprition.Number_2 = 20f;
float result = oprition.GetResult();
Debug.Log(result);
}
}
打印结果:30
图解Python数据结构与算法-实战篇