设计模式- 装饰者模式 (lua 版本)

实现功能:
张三买手抓饼(令加鸡蛋、火腿)

输出日志:
张三 买了 经典 cake 一份, 一共花了 5 钱
张三 买了 经典 cake 加 Material1 一份, 一共花了 6 钱
张三 买了 经典 cake 加 Material2 一份, 一共花了 7 钱
张三 买了 经典 cake 加 Material1 加 Material2 一份, 一共花了 8 钱
类:
HandCake 、LeeHandCake、Decorator、DecoratorMaterial1、DecoratorMaterial2、DecoratorTest、Costomer
local Costomer = require 'Test/Costomer'
local DecoratorMaterial1 = require 'Test/DecoratorMaterial1'
local DecoratorMaterial2 = require 'Test/DecoratorMaterial2'
local LeeHandCake = require 'Test/LeeHandCake'

---@class DecoratorTest
local class = class()

function class:Start()
    local leeHandCake = LeeHandCake.new()
    local c1 = Costomer.new('张三')

    c1:Buy(leeHandCake)

    local m1 = DecoratorMaterial1.new(leeHandCake)
    c1:Buy(m1)

    local m2 = DecoratorMaterial2.new(leeHandCake)
    c1:Buy(m2)

    c1:Buy(DecoratorMaterial2.new(DecoratorMaterial1.new(leeHandCake)))
end

return class
---@class Costomer
local class = class()

function class:ctor(name)
    self.name = name
end

function class:Name()
    return self.name
end

function class:Buy(cake)
    return log(self.name .. ' 买了 ' .. cake:CakeName() .. ' 一份, 一共花了 ' .. cake:CakeCost() .. ' 钱')
end

return class
---@class HandCake
local class = class()

function class:ctor()

end

function class:CakeName()
    return 'cake name'
end

function class:CakeCost()
    return 3
end

return class
local base = require 'Test/HandCake'

---@class LeeHandCake
local class = class(base)

function class:ctor()
    base.ctor(self)
end

--[[ override ]]--
function class:CakeName()
    return '经典 cake'
end

--[[ override ]]--
function class:CakeCost()
    return 5
end

return class
local base = require 'Test/HandCake'
---@class Decorator
local class = class(base)

function class:ctor(cake)
    base.ctor(self)
    self.cake = cake
end

--[[ override ]]--
function class:CakeName()
    return self.cake:CakeName()
end

--[[ override ]]--
function class:CakeCost()
    return self.cake:CakeCost()
end

return class
local base = require 'Test/Decorator'
---@class DecoratorMaterial1
local class = class(base)

function class:ctor(cake)
    base.ctor(self)
    self.cake = cake
end

--[[ override ]]--
function class:CakeName()
    return self.cake:CakeName() .. ' ' .. '加 Material1'
end

--[[ override ]]--
function class:CakeCost()
    return self.cake:CakeCost() + 1
end

return class
local base = require 'Test/Decorator'
---@class DecoratorMaterial2
local class = class(base)

function class:ctor(cake)
    base.ctor(self)
    self.cake = cake
end

--[[ override ]]--
function class:CakeName()
    return self.cake:CakeName() .. ' ' .. '加 Material2'
end

--[[ override ]]--
function class:CakeCost()
    return self.cake:CakeCost() + 2
end

return class

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值