替子系統裡的一堆介面定義一套統一的高階介面,讓子系統更易使用。
左邊是沒有使用門面模式(Facade)的狀況下,讓整個執行程序複雜
有邊是使用門面模式(Facade)的狀況下,只需要通過一個介面就可以使用取的各個物件
class Facade
def initialize(subsystem1, subsystem2)
@subsystem1 = subsystem1 || Subsystem1.new
@subsystem2 = subsystem2 || Subsystem2.new
end
def operation
results = []
results.append('Facade initializes subsystems:')
results.append(@subsystem1.operation1)
results.append(@subsystem2.operation1)
results.append('Facade orders subsystems to perform the action:')
results.append(@subsystem1.operation_n)
results.append(@subsystem2.operation_z)
results.join("\n")
end
end
class Subsystem1
# @return [String]
def operation1
'Subsystem1: Ready!'
end
def operation_n
'Subsystem1: Go!'
end
end
class Subsystem2
def operation1
'Subsystem2: Get ready!'
end
def operation_z
'Subsystem2: Fire!'
end
end
def client_code(facade)
print facade.operation
end
subsystem1 = Subsystem1.new
subsystem2 = Subsystem2.new
facade = Facade.new(subsystem1, subsystem2)
client_code(facade)
Facade initializes subsystems:
Subsystem1: Ready!
Subsystem2: Get ready!
Facade orders subsystems to perform the action:
Subsystem1: Go!
Subsystem2: Fire!
若是沒有使用門面模式(Facade),會需要個別取用Subsystem1
與Subsystem2
,而門面模式(Facade)其實很像一個打包的介面,他幫我們把需要的物件整理在這個介面裡,然後可以直接取用,不用自己去拿
當然,並不是每個東西(物件)都要裝進去此介面,而是可以創立不同的門面模式(Facade)來取得較常使用的物件,所以別以為一定要每個東西都裝進門面模式(Facade)的介面之中喔!
文章不定期更新!
感謝大家 如有問題,再煩請大家指教!