#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2024-04-28 10:10
# @Author : Maple
# @File : 09-外观模式.py
"""
外观模式是一种结构型设计模式,它提供了一个统一的接口来访问子系统中的一组接口,从而使子系统更容易使用。
外观模式通过定义一个高层接口,让子系统的使用更加简单化,同时也帮助客户程序和子系统之间解耦
"""
"""
案例1:简单的计算机启动过程
这个例子演示了如何使用外观模式来简化计算机的启动过程。通过外观类,我们封装了启动计算机时涉及的复杂交互。
"""
class CPU:
def start(self):
print("CPU is starting...")
class Memory:
def load(self, position, data):
print(f"Loading data into position {position}")
class HardDrive:
def read(self, lba, size):
print(f"Reading {size} bytes from LBA {lba}")
class ComputerFacade:
def __init__(self):
self.cpu = CPU()
self.memory = Memory()
self.hard_drive = HardDrive()
def start_computer(self):
self.cpu.start()
self.memory.load(0, "Operating System")
self.hard_drive.read(1024, 2048)
"""
案例2:家庭影院系统
在这个例子中,外观模式用于简化家庭影院的操作。有多个设备,如投影仪、DVD播放器、音响系统等,外观模式使得用户通过一个简单的接口来操作所有这些设备。
"""
class Projector:
def on(self):
print("Projector turned on")
def off(self):
print("Projector turned off")
class DVDPlayer:
def on(self):
print("DVD Player turned on")
def play(self, movie):
print(f"Playing '{movie}'")
def off(self):
print("DVD Player turned off")
class SoundSystem:
def on(self):
print("Sound system turned on")
def set_volume(self, level):
print(f"Volume set to {level}")
def off(self):
print("Sound system turned off")
class HomeTheaterFacade:
def __init__(self):
self.projector = Projector()
self.dvd_player = DVDPlayer()
self.sound_system = SoundSystem()
def watch_movie(self, movie):
print("Get ready to watch a movie...")
self.projector.on()
self.sound_system.on()
self.sound_system.set_volume(7)
self.dvd_player.on()
self.dvd_player.play(movie)
def end_movie(self):
print("Shutting movie theater down...")
self.projector.off()
self.dvd_player.off()
self.sound_system.off()
"""
案例3:金融服务接口
这个例子展示了如何使用外观模式来提供一个简化的接口,用于访问复杂的金融服务,如信用评估、贷款审批和客户账户管理
"""
class CreditRatingSystem:
def evaluate_credit(self, customer_id):
print(f"Evaluating credit for customer {customer_id}")
return True
class LoanApprovalSystem:
def approve_loan(self, customer_id):
print(f"Approving loan for customer {customer_id}")
return True
class CustomerAccount:
def create_account(self, customer_id):
print(f"Account created for customer {customer_id}")
class BankingFacade:
def __init__(self):
self.credit_system = CreditRatingSystem()
self.loan_system = LoanApprovalSystem()
self.account_system = CustomerAccount()
def process_loan(self, customer_id):
print("Processing loan for customer...")
if self.credit_system.evaluate_credit(customer_id):
if self.loan_system.approve_loan(customer_id):
self.account_system.create_account(customer_id)
print(f"Loan processing complete for customer {customer_id}")
if __name__ == '__main__':
print('********1.简单的计算机启动过程 **************')
computer = ComputerFacade()
computer.start_computer()
computer = ComputerFacade()
"""
CPU is starting...
Loading data into position 0
Reading 2048 bytes from LBA 1024
CPU is starting...
Loading data into position 0
Reading 2048 bytes from LBA 1024
"""
computer.start_computer()
print('*******2.家庭影院系统**************')
home_theater = HomeTheaterFacade()
"""
Get ready to watch a movie...
Projector turned on
Sound system turned on
Volume set to 7
DVD Player turned on
Playing 'Inception'
"""
home_theater.watch_movie("Inception")
"""
Shutting movie theater down...
Projector turned off
DVD Player turned off
Sound system turned off
"""
home_theater.end_movie()
print('*******3.金融服务接口**************')
banking = BankingFacade()
"""
Processing loan for customer...
Evaluating credit for customer 123456
Approving loan for customer 123456
Account created for customer 123456
Loan processing complete for customer 123456
"""
banking.process_loan(123456)