抽象工廠模式lua實現

--[[
	工廠方法模式:
			一個抽象產品類,可以派生出多個具體產品類。
			一個抽象工廠類,可以派生出多個具體工廠類。
			每個具體工廠類只能創建一個具體產品類的實例。
	抽象工廠模式:
			多個抽象產品類,每個抽象產品類可以派生出多個具體產品類。
			一個抽象工廠類,可以派生出多個具體工廠類。
			每個具體工廠類可以創建多個具體產品類的實例。
]]--

--[[
	我的總結:
	簡單工廠:一個工廠生產所有的部件
	工廠方法:一個工廠生產一種部件
	抽象工廠:一個工廠生產幾種產品
]]--

IUser = {}

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

SqlServerUser = IUser:new()

function SqlServerUser:Insert()
	print("在SQL Server中給User表增加一條記錄")
end

function SqlServerUser:GetUserRecord()
	print("在SQL Server中User表獲取一條記錄")
end

AccessUser = IUser:new()

function AccessUser:Insert()
	print("在Access中給User表增加一條記錄")
end

function AccessUser:GetUserRecord()
	print("在Access中User表獲取一條記錄")
end

IDepartment = {}

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

SqlServerDepartment = IDepartment:new()

function SqlServerDepartment:Insert()
	print("在SQL Server中給Department表增加一條記錄")
end

function SqlServerDepartment:GetDepartmentRecord()
	print("在SQL Server中的Department表獲取一條記錄")
end

AccessDepartment = IDepartment:new()

function AccessDepartment:Insert()
	print("在Access中給Department表增加一條記錄")
end

function AccessDepartment:GetDepartmentRecord()
	print("在Access中的Department表獲取一條記錄")
end

IFactory = {}

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

SqlServerFactory = IFactory:new()

function SqlServerFactory:GetUser()
	return SqlServerUser:new()
end

function SqlServerFactory:GetDepartment()
	return SqlServerDepartment:new()
end

AccessFactory = IFactory:new()

function AccessFactory:GetUser()
	return AccessUser:new()
end

function AccessFactory:GetDepartment()
	return AccessDepartment:new()
end

choice = io.read()
factory = nil
if choice == "Sqlserver" then
	factory = SqlServerFactory:new()
elseif choice == "Access" then
	factory = AccessFactory:new()
end

if factory ~= nil then
	user = factory:GetUser()
	department = factory:GetDepartment()

	user:Insert()
	user:GetUserRecord()

	department:Insert()
	department:GetDepartmentRecord()
end


輸入:

Sqlserver

輸出:

在SQL Server中給User表增加一條記錄
在SQL Server中User表獲取一條記錄
在SQL Server中給Department表增加一條記錄
在SQL Server中的Department表獲取一條記錄

簡單工廠lua實現

工廠方法lua實現

 

發佈了48 篇原創文章 · 獲贊 12 · 訪問量 17萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章