行为型模式

行为型模式

  行为型模式:解释器模式、责任链模式、命令模式、迭代器模式、中介者模式、备忘录模式、观察者模式、状态模式、策略模式、访问者模式、模板方法模式。

一、责任链模式

  使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。

1、责任链模式示例

from abc import ABCMeta, abstractmethod

class Handler(metaclass=ABCMeta):   # 接口:请假处理者
    @abstractmethod
    def handle_leave(self, day):
        pass

class GeneralManager(Handler):
    def handle_leave(self, day):
        if day < 10:
            print("总经理准假%d天" % day)
        else:
            print("你还是辞职吧")

class DepartmentManager(Handler):
    def __init__(self):
        self.next = GeneralManager()
    def handle_leave(self, day):
        if day <= 5:
            print("部门经理准假%d天" % day)
        else:
            print("部门经理职权不足")
            self.next.handle_leave(day)

class ProjectDirector(Handler):
    def __init__(self):
        self.next = DepartmentManager()

    def handle_leave(self, day):
        if day <= 3:
            print("项目主管准假%d" % day)
        else:
            print("项目主管职权不足")
            self.next.handle_leave(day)

# Client
day = 4
h = ProjectDirector()
h.handle_leave(day)

  示例以员工请假为例:每个具体处理者都有权限去处理请求,如果处理不了沿着链发送给next。如果全都不成功,则发送个

2、责任链模式总结

角色:

  • 抽象处理者(Handler)
  • 具体处理者(ConcreteHandler)
  • 客户端(Client)

适用场景:

  • 多个对象可以处理一个请求,哪个对象处理由运行时决定
  • 不明确接收者的情况下,向多个对象中的一个提交一个请求

优点:

  • 降低耦合度:一个对象无需知道是其他哪一个对象处理其请求

二、观察者模式

  定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并自动更新。观察者模式又称“发布——订阅”模式。

1、观察者模式示例

from abc import ABCMeta, abstractmethod

class Observer(metaclass=ABCMeta):  # 接口:抽象订阅者
    @abstractmethod
    def update(self, notice):  # notice参数是一个Notice类的对象
        pass

class Notice:   # 抽象发布者(没有抽象方法的接口,所有方法直接定义出来)
    def __init__(self):
        self.observers = []

    def attach(self, obs):
        self.observers.append(obs)

    def detach(self, obs):
        self.observers.remove(obs)

    def notify(self):   # 推送
        for obs in self.observers:  # 每个观察者对象
            obs.update(self)  # 传入Notice对象的本身

class StaffNotice(Notice):    # 具体的发布者
    def __init__(self, company_info=None):
        super().__init__()  # 调用父类的构造函数声明observers属性
        self.__company_info = company_info  # 公司消息处理为私有对象

    @property  # 属性装饰器
    def company_info(self):  #
        return self.__company_info

    @company_info.setter
    def company_info(self, info):  #
        self.__company_info = info
        self.notify()   # 关键代码:实现赋值后自动推送

class Staff(Observer):   # 具体观察者
    def __init__(self):
        self.company_info = None   # 构造自己的消息

    def update(self, notice):
        self.company_info = notice.company_info

notice = StaffNotice("初始公司信息")   # 创建消息发布对象
s1 = Staff()   # 创建消息观察者
s2 = Staff()
notice.attach(s1)   # 发布对象绑定观察者
notice.attach(s2)
print(s1.company_info)   # None
notice.company_info = "公司今年业绩好发奖金!"   # 写入
print(s1.company_info)   # 公司今年业绩好发奖金!
print(s2.company_info)   # 公司今年业绩好发奖金!
notice.detach(s2)   # 发布对象解绑观察者
notice.company_info = "公司明天放假!"
print(s1.company_info)   # 公司明天放假!
print(s2.company_info)   # 公司今年业绩好发奖金!

  注意装饰器实现读和写的用法。

2、观察者模式总结

角色:

  • 抽象主题(Subject)——抽象发布者
  • 具体主题(ConcreteSubject)——具体发布者
  • 抽象观察者(Observer)
  • 具体观察者(ConcreteObserver)——订阅者

适用场景:

  • 当一个抽象模型有两方面,其中一个方面依赖于另一个方面。将这两者封装在独立对象中以使它们可以各自独立地改变和复用
  • 当对一个对象的改变需要同时改变其它对象,而不知道具体有多少对象待改变。
  • 当一个对象必须知道其它对象,而它又不能假定其它对象时谁。换言之,你不希望这些对象是紧密耦合的。

优点:

  • 目标和观察者之间的抽象耦合最小
  • 支持广播通信

三、策略模式

  定义一系列的算法,把它们一个个封装起来,并使它们可相互替换。本模式使得算法可独立于使用它的客户而变化。

1、策略模式示例

 

2、策略模式总结

 

四、模板方法模式

 

posted @ 2019-02-22 13:31 休耕 阅读( ...) 评论( ...) 编辑 收藏
深度学习是机器学习的一个子领域,它基于人工神经网络的研究,特别是利用多层次的神经网络来进行学习和模式识别。深度学习模能够学习数据的高层次特征,这些特征对于图像和语音识别、自然语言处理、医学图像分析等应用至关重要。以下是深度学习的一些关键概念和组成部分: 1. **神经网络(Neural Networks)**:深度学习的基础是人工神经网络,它是由多个层组成的网络结构,包括输入层、隐藏层和输出层。每个层由多个神经元组成,神经元之间通过权重连接。 2. **前馈神经网络(Feedforward Neural Networks)**:这是最常见的神经网络类,信息从输入层流向隐藏层,最终到达输出层。 3. **卷积神经网络(Convolutional Neural Networks, CNNs)**:这种网络特别适合处理具有网格结构的数据,如图像。它们使用卷积层来提取图像的特征。 4. **循环神经网络(Recurrent Neural Networks, RNNs)**:这种网络能够处理序列数据,如时间序列或自然语言,因为它们具有记忆功能,能够捕捉数据中的时间依赖性。 5. **长短期记忆网络(Long Short-Term Memory, LSTM)**:LSTM 是一种特殊的 RNN,它能够学习长期依赖关系,非常适合复杂的序列预测任务。 6. **生成对抗网络(Generative Adversarial Networks, GANs)**:由两个网络组成,一个生成器和一个判别器,它们相互竞争,生成器生成数据,判别器评估数据的真实性。 7. **深度学习框架**:如 TensorFlow、Keras、PyTorch 等,这些框架提供了构建、训练和部署深度学习模的工具和库。 8. **激活函数(Activation Functions)**:如 ReLU、Sigmoid、Tanh 等,它们在神经网络中用于添加非线性,使得网络能够学习复杂的函数。 9. **损失函数(Loss Functions)**:用于评估模的预测与真实值之间的差异,常见的损失函数包括均方误差(MSE)、交叉熵(Cross-Entropy)等。 10. **优化算法(Optimization Algorithms)**:如梯度下降(Gradient Descent)、随机梯度下降(SGD)、Adam 等,用于更新网络权重,以最小化损失函数。 11. **正则化(Regularization)**:技术如 Dropout、L1/L2 正则化等,用于防止模过拟合。 12. **迁移学习(Transfer Learning)**:利用在一个任务上训练好的模来提高另一个相关任务的性能。 深度学习在许多领域都取得了显著的成就,但它也面临着一些挑战,如对大量数据的依赖、模的解释性差、计算资源消耗大等。研究人员正在不断探索新的方法来解决这些问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值