设计模式之简单工厂模式

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数据结构与算法-实战篇

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值