Python设计模式(二)

一、外观模式

#!/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)

二、责任链模式

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time    : 2024-04-28 10:28
# @Author  : Maple
# @File    : 10-责任链模式.py


"""
责任链模式是一种行为设计模式,允许多个对象处理请求,或者将这些对象连成一条链
请求从链的一端流动到另一端,直到被处理。这种模式非常适用于有多个可能的处理程序或处理步骤的情况。
"""


"""
案例1:日志记录器
这个例子中使用责任链模式来处理不同级别的日志消息。可以设置多个日志记录器处理不同级别的日志。
"""
class Logger:
    INFO = 1
    DEBUG = 2
    ERROR = 3

    def __init__(self, level):
        self.level = level
        self.next_logger = None

    def set_next_lo
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值