解释器模式

简介

解释器模式,简单来说就是一种翻译机,将我们听到的英文翻译成中文。

那么这和我们之前提到的适配器模式有什么不同呢?

下面我们来对比一下二者的区别

正文

 首先,我先从以前的文章从贴过来一段适配器模式的代码实现

class ProductA:
    def type_c(self):
        print("这是一个type-c输出")
 
 
 
class ProductB(ProjectA):
    def type_c(self):
        print("经过转换,变成一个type-b输出")

接下来我实现一个简单的翻译器模式

class Interpreter:
    def __init__(self):
        self.dictionaries = {
            "a":1,
            "b":2,
            "c":3,           
            "d":4,
        }

    def translation(self,str_list):
        return "".join([self.dictionaries[s] for s in str_list if s in self.dictionaries])



i = Interpreter()
i.translation("abbdcbaab)

对比之下我们可以很容易的看出二者的区别,适配器模式是直接将原有的行为进行了替换或者修改,而翻译器则是创造一种全新的方式,将我们输入的语言转化从另一种语言输出,本质上改动的输入内容的结构,而不是改动函数的结构。

同时经过一些网上的搜索,大多数都是认为解释器模式只有在设计编译器的时候会被用到,但是个人觉得序列化器筛选器都应用到了翻译器模式。

前者是将对象与json字符串之间做转化,后者则是将json字符串和SQL语句相互转化。下面我们简单实现一下两者。

首先是序列化器

from collections import defaultdict


class Interpreter:
    def __init__(self,obj) -> None:
        self.obj = obj

    def translation_dict(self):
        temp_dict = defaultdict(str)
        for o in dir(self.obj):
            if hasattr(self.obj, o):
                temp_dict[o] = getattr(self.obj,o)
        return temp_dict


class Test:
    name = "test"
    value = "my_test"

    def test(self):
        print("这是一个测试")


i = Interpreter(Test())
print(i.translation_dict())

这是一个十分粗糙的序列化器,将对象的所有属性都封装到字典中,并且还不支持从字典转回对象。 但是也完成了解释器最核心的功能,将输入的数据类型转化成另外一种类型,这时我又突然想到强制转换应该也是运用了解释器的设计模式

接下来是筛选器

class InterpreterJSON:
    def __init__(self,var) -> None:
        self.var = var
    def translation(self):
        return " and ".join([key+"="+value for key, value in self.var.items()])


i = InterpreterJSON({"test1":"111","test2":"222",})
print(i.translation())

 这个筛选器也十分的简陋,只是将json翻译成了一段SQL的筛选条件。

总结

通过上述两个小例子,我们大致知道了翻译器模式的用途,以及我们可以使用的应用场景,如果有什么写的不对的地方,欢迎大家指出

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值