建造者模式lua实现

--[[
	将一个复杂对象的构造与它的表示分离,使同样的构建过程可以创建不同的表示,这样的设计模式被称为建造者模式

	1 当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时。
	2 当构造过程必须允许被构造的对象有不同表示时。

]]--

Director = {}

function Director:new(o)
	o = o or {}
	setmetatable(o,self)
	self.__index = self
	return o;
end

function Director:Construct(builder)
	if builder ~= nil then
		builder:Coating()
		builder:Engine()
		builder:Radar()
	end
end

Builder = {}

function Builder:new(o)
	o = o or {}
	setmetatable(o,self)
	self.__index = self
	return o;
end

Product = {}

function Product:new(o)
	o = o or {}
	setmetatable(o,self)
	self.__index = self
	return o;
end

function Product:Show()
	print(self.unit)
end

F22Builder = Builder:new()

function F22Builder:new(o)
	o = o or {}
	setmetatable(o,self)
	o.product = Product:new()
	self.__index = self
	return o;
end

function F22Builder:Coating()
	if self.product.unit == nil then
		self.product.unit = "F22具有:"
	end
	self.product.unit = self.product.unit.." 隐形涂料"
end

function F22Builder:Engine()
	self.product.unit = self.product.unit.." 2台F119-PW-100发动机"
end

function F22Builder:Radar()
	self.product.unit = self.product.unit.." APG-77有源相控阵雷达"
end

function F22Builder:GetProduct()
	return self.product
end

J10Builder = Builder:new()

function J10Builder:new(o)
	o = o or {}
	setmetatable(o,self)
	o.product = Product:new()
	self.__index = self
	return o;
end

function J10Builder:Coating()
	if self.product.unit == nil then
		self.product.unit = "J10具有:"
	end
	self.product.unit = self.product.unit.." 一般涂料"
end

function J10Builder:Engine()
	self.product.unit = self.product.unit.." 1台AL-31F发动机"
end

function J10Builder:Radar()
	self.product.unit = self.product.unit.." JL-10脉冲多普勒雷达"
end

function J10Builder:GetProduct()
	return self.product
end



--************* 建造F22 **************
theF22Builder = F22Builder:new()
Director:Construct(theF22Builder)
F22 = theF22Builder:GetProduct()
F22:Show()

--************* 建造J10 **************
theJ10Builder = J10Builder:new()
Director:Construct(theJ10Builder)
J10 = theJ10Builder:GetProduct()
J10:Show()



输出结果:

F22具有: 隐形涂料 2台F119-PW-100发动机 APG-77有源相控阵雷达
J10具有: 一般涂料 1台AL-31F发动机 JL-10脉冲多普勒雷达

 

  • 7
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值