设计模式_解释器模式

news2024/9/25 13:20:31

解释器模式 

案例

角色

1 解释器基类                 (BaseInterpreter)

2 具体解释器1 2 3...        (Interperter 1 2 3 )

3 内容                              (Context)

4 用户                              (user)

       

  流程

(上下文) ---- 传给排好顺序的解释器(可以通过配置文件信息排序)

              ---- 得到(修改后的上下文) 

代码

角色 Context

// 内容
public class Context
{
    private string text = null;

    public Context(string text)
    {
        this.text = text;
    }

    public void Set(string newText)
    {
        text = newText;
    }

    public string Get()
    {
        return text;
    }

}

角色 BaseInterpreter

// 解释器基类
public abstract class BaseInterpreter
{
    public abstract void Conversion(Context context);
}

角色 Interpreter1


public class Interpreter1 : BaseInterpreter
{
    public override void Conversion(Context context)
    {
        // 1 改为 A 
        string text = context.Get();
        char[] c = text.ToCharArray();
        for (int i = 0; i < c.Length; i++)
        {
            if (c[i] == '1')
            {
                c[i] = 'A';
            }
        }

        context.Set(new string(c));
    }
}

角色 Interpreter2

        和1类似 仅仅 2=B

角色 Interpreter3 

        和1类似 仅仅 3=C

角色 用户

using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class Player : MonoBehaviour
{
    // 显示出内容
    public GameObject obj = null;

    void Start()
    {
        // 上下文
        Context context = new Context("123456789");

        // 创建解码
        List<BaseInterpreter> interpreterList = new List<BaseInterpreter>();
        interpreterList.Add(new Interpreter1());
        interpreterList.Add(new Interpreter2());
        interpreterList.Add(new Interpreter3());

        // 开始解码
        foreach (var item in interpreterList)
        {
            item.Conversion(context);
        }

        obj.GetComponent<Text>().text = context.Get();
    }

}

运行结果

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1026774.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python与数据分析--Matplotlib-2

目录 1.写在文前 2.实例1--武汉新冠趋势图 3.简单散点图实例 4.灵活散点图实例 5.饼图操作实例 1.写在文前 """ Matplotlib库我们大致已经学完了&#xff0c;但是缺乏一定的实战经验。 今天我们就来进行一下matplotlib的实战操作。 """ #导…

OSI七层网络参考模型与数据流通过程

OSI七层网络参考模型 文章目录 OSI七层网络参考模型1. OSI参考模型初步了解2. OSI参考模型理解3. 数据流通的过程 1. OSI参考模型初步了解 OSI&#xff0c;英文为Open System Interconnect&#xff0c;意为开放式系统互连&#xff0c;国际化标准组织(ISO)指定了OSI模型&#x…

二叉树经典OJ题——【数据结构】

W...Y的主页 &#x1f60a; 代码仓库分享 &#x1f495; 今天我们来进行二叉树的OJ练习&#xff0c;就是利用二叉树的前序、中序、后续以及晨序遍历的特性进行OJ训练。话不多说&#xff0c;来看我们的第一道题。 【leetcode 965.单值二叉树】 OJ链接 如果二叉树每个节点都具…

JavaScript基础知识12——运算符:算数运算符,比较运算符

哈喽&#xff0c;大家好&#xff0c;我是雷工。 以下为JavaScript基础知识学习笔记。 一、算数运算符 1、算术运算符&#xff1a;即进行数学计算的符号。 2、有哪些算数运算符&#xff1a; &#xff1a;加法 -&#xff1a;减法 *&#xff1a;乘法 /:除法 %:取余&#xff08;…

湖南衡阳3D扫描在生物仿真研究的应用高精度三维扫描螃蟹-CASAIM中科广电

生物仿真研究与应用一直是科研及工艺品的热门方向&#xff0c;很多设计脱胎于生物本身&#xff0c;传统方式又大多只能以画师手绘为主&#xff0c;做到“纤毫毕现”极其困难&#xff0c;故而才有了“齐白石的虾”、“徐悲鸿的马”等出圈的艺术家的画作&#xff0c;对于某种生物…

云原生的简单理解

一、何谓云原生&#xff1f; 一种构建和运行应用软件的方法 应用程序从设计之初即考虑到云的环境&#xff0c;原生为云而设计&#xff0c;在云上以最佳姿势运行&#xff0c;充分利用和发挥云平台的弹性分布式优势。 二、包括以下四个要素 采用容器化部署&#xff1a;实现云平…

ASfP: 增强AOSP平台开发的利器——Android Studio for Platform

ASfP: 增强AOSP平台开发的利器——Android Studio for Platform Android Studio for Platform (ASfP) 是一个为使用 Soong 构建系统构建的 Android 开源项目&#xff08;AOSP&#xff09;平台开发者而设计的 Android Studio IDE 版本。与标准 Android Studio 不同&#xff0c;…

福建福州大型钢结构件3D扫描全尺寸三维测量平面度平行度检测-CASAIM中科广电

高精度三维扫描技术已经在大型工件制造领域发挥着重要作用&#xff0c;特别是在质量检测环节&#xff0c;高效、高精度&#xff0c;可以轻松实现全尺寸三维测量。本期&#xff0c;我们要分享的应用是在大型钢结构件的关键部位尺寸及形位公差检测。 钢结构件&#xff0c;是将多…

2023版 STM32实战1 LED灯驱动(电路与代码都讲解)

电路图 常规画法&#xff08;带限流电阻计算公式&#xff09; 设LED 电流为20mA(统一单位为 0.02A) 电压为3.3V 限流电阻(电源电压-负载正向工作电压)/工作电流 限流电阻(5V-3.3V)/0.02mA1.7/V0.02A85R 省事画法&#xff08;直接用IO输出&#xff09; 代码&#xff08;直…

学习pytorch11 神经网络-非线性激活

神经网络-非线性激活 官网文档常用1 ReLUinplace 常用2 Sigmoid 代码logs B站小土堆学习pytorch视频 非常棒的up主&#xff0c;讲的很详细明白 官网文档 https://pytorch.org/docs/stable/nn.html#non-linear-activations-weighted-sum-nonlinearity 常用1 ReLU 对输入做截断…

Scrapy+Selenium自动化获取个人CSDN文章质量分

前言 本文将介绍如何使用Scrapy和Selenium这两个强大的Python工具来自动获取个人CSDN文章的质量分数。我们将详细讨论Scrapy爬虫框架的使用&#xff0c;以及如何结合Selenium浏览器自动化工具来实现这一目标。无需手动浏览每篇文章&#xff0c;我们可以轻松地获取并记录文章的…

OpenCV实现的F矩阵+RANSAC原理与实践

1 RANSAC 筛选 1.1 大致原理 Random sample consensus (RANSAC)&#xff0c;即随机抽样一致性&#xff0c;其是一种用于估计模型参数的迭代方法&#xff0c;特别适用于处理包含离群点&#xff08;outliers&#xff09;的数据集 RANSAC 的主要思想是随机采样数据点&#xff0…

SpringBoot文件上传-阿里云OSS

1.打开阿里云 说明&#xff1a;登录阿里云账号 2.点击AccessKey管理 3.创建AccessKey 说明&#xff1a;记得复制accessKeyId&#xff0c;accessKeySecret并保存起来 4. 点击对象存储OSS 5.创建Bucket 说明&#xff1a;创建储存桶 6.查看SDK示例 7.Java简单上传 8.上传文件流…

已解决 AttributeError: ‘str‘ object has no attribute ‘decode‘

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页: &#x1f405;&#x1f43e;猫头虎的博客&#x1f390;《面试题大全专栏》 &#x1f995; 文章图文并茂&#x1f996…

相对论的应用:GPS导航

“但是数学享有盛誉还有另一个原因&#xff1a;正是数学为精确的自然科学提供了一定程度的安全保障&#xff0c;而没有数学&#xff0c;它们就无法实现这一点。” “就现实而言&#xff0c;数学定律是不确定的&#xff1b;就其确定而言&#xff0c;它们并不涉及现实。” —阿尔…

Mysql高级——索引优化和查询优化(1)

索引优化 1. 数据准备 学员表插50万条&#xff0c; 班级表插1万条。 建表 CREATE TABLE class (id INT ( 11 ) NOT NULL AUTO_INCREMENT,className VARCHAR ( 30 ) DEFAULT NULL,address VARCHAR ( 40 ) DEFAULT NULL,monitor INT NULL,PRIMARY KEY ( id ) ) ENGINE INNO…

解决Win11/10中Edge浏览器页面加载不出来、打不开问题|有网但是打不开,加载不了

问题症状 edge浏览器打不开&#xff0c;有网络能正常上网&#xff0c;但是edge浏览器无法浏览。网络质量很高&#xff0c;但是页面就是加载不出来&#xff0c;详情如下&#xff1a; &#xff08;我是在科学上网后造成这样子的原因&#xff0c;现在将我的方法分享一下&#xff…

Flask狼书笔记 | 09_图片社交网站 - 大型项目的架构与需求

文章目录 9 图片社交网站9.1 项目组织架构9.2 编写程序骨架9.3 高级用户认证9.4 基于用户角色的权限管理9.5 使用Flask-Dropzone优化文件上传9.6 使用Flask-Avatars处理用户头像9.7 图片展示与管理9.8 收藏图片9.9 用户关注9.10 消息提醒9.11用户资料与账户设置9.12 首页与探索…

近万采集各种典故网站文章大全ACCESS\EXCEL数据库

一个学语文的朋友问我有没有关于各种典故以及万物由来的数据&#xff0c;我看了看手头的资料发现还真没有&#xff0c;而且网上似乎也没有这一类的成品&#xff0c;因此就用程序采集了一个典故网的文章。 分类统计情况有&#xff1a;成语典故&#xff08;共4198条&#xff09;、…

第三、四、五场面试

第三场 共享屏幕做题&#xff08;三道简单题&#xff09; 替换空格成%20&#xff08;双指针&#xff09; 删除升序链表中的重复元素&#xff08;指针&#xff09;有效的括号&#xff08;栈&#xff09; 第四场、第五场 自我介绍 项目拷打 整个项目架构rpc模块的情况分析的数…