STUNUM

面有萌色,胸有丘壑。心有猛虎,细嗅蔷薇。

嗨,我是王鑫 (@stunum),一名 Python 开发者。


Python web开发,后端以Django框架为主,前端使用Vue.js...

python设计模式之模板方法模式

模板方法模式

意义:

定义一个算法或者流程,部分环节设计为外部可变,用类似于模板的思想来实例化一个实体,可以往模板中填充不同的内容;在模板思想下,实体的整体框架是确定的,他是一个模板,但是模板下内容可变,从而实现了动态的更新流程或算法。

适用性:
  • 一次性实现一个算法的不变的部分,并将可变的行为留给子类来实现。
  • 各子类中公共的行为应被提取出来并集中到一个公共父类中以避免代码重复。这是Opdyke 和Johnson所描述过的“重分解以一般化”的一个很好的例子[ OJ93 ]。首先识别现有代码中的不同之处,并且将不同之处分离为新的操作。最后,用一个调用这些新的操作的模板方法来替换这些不同的代码。
    举例:

    ``` #实现一个客户点单后的处理流程流程 class User(object):

    def init(self, name, shop, times, number): self.name = name self.shop = shop self.times = times self.number = number

class Handle(object):

def __init__(self, user=None):
    self.user = user

def Invoicen(self):
    #打印小票
    string = f"打印小票  客户:{self.user.name}  商品:{self.user.shop}  数量:{self.user.number}  时间:{self.user.times}"
    print(string)

def Make(self):
    #开始制作
    print(f"制作完成:{self.user.shop} 数量:{self.user.number}")

def run(self):
    self.Invoicen()
    self.Make()

if name == ‘main’: test = Handle() xiaoming = User(“小明”, “汉堡”, “17:50”, “5”) test.user = xiaoming test.run()


输出结果:

打印小票 客户:小明 商品:汉堡 数量:5 时间:17:50 制作完成:汉堡 数量:5 ```

最近的文章

python设计模式之责任链模式

责任链模式意义:将多个处理方法连接成一条链条,请求将在这条链条上流动直到该链条中有一个节点可以处理该请求;通常这条链条是一个对象包含对另一个对象的引用而形成链条,每个节点有对请求的条件,当不满足条件将传递给下一个节点处理。适用性: 有多个的对象可以处理一个请求,哪个对象处理该请求运行时刻自动确定。 你想在不明确指定接收者的情况下,向多个对象中的一个提交一个请求。 可处理一个请求的对象集合应被动态指定。举例:class Bases(object): def __init__(se...…

水滴石穿继续阅读
更早的文章

python设计模式之解释器模式

解释器模式意义:开发者自定义一种“有内涵”的语言(或者叫字符串),并设定相关的解释规则,输入该字符串后可以输出公认的解释,或者执行程序可以理解的动作。这种模式被用在 SQL 解析、符号处理引擎等解释器模式要实现两个核心角色: 终结符表达式:实现与文法中的元素相关联的解释操作,通常一个解释器模式中只有一个终结符表达式,但有多个实例,对应不同的终结符。终结符一半是文法中的运算单元,比如有一个简单的公式R=R1+R2,在里面R1和R2就是终结符,对应的解析R1和R2的解释器就是终结符表达式。 ...…

水滴石穿继续阅读