zoukankan      html  css  js  c++  java
  • Head First设计模式 1 设计模式入门 策略模式 观察者模式

    关于基本的OOP特征:

    OOP的几大特征是抽象 继承 封装 多态。

    我们把共同的部分抽象出来作为抽象类的存在,使用继承和接口来实现多态,然后私有的部分封装起来。一定程度上说,这些概念都是简单的设计模式。

    设计原则1:

    找出应用中可能需要变化的部分,把他们独立出来,不要和那些不需要变化的部分融合在一起。

    设计原则2:

    针对接口编程,而不是针对实现编程。

    这里的接口包含抽象类。

    设计原则3:

    多用组合 少用继承。

    组合和继承都能作为将不变的代码和变化的代码分开的方式,但是组合更加灵活,可以将一个依赖的行为封装为一个类,然后通过接口的方式引入,这样不会依赖于类的层级结构,而且可以在运行的时候动态改变(通过set方法改变依赖的组合对象)。

    通俗的讲,继承是一种"是一个"的关系,组合是一种"有一个"的关系,大部分情况下我们需要的都是"有一个"。

    策略模式:

    定义一系列的算法,把每一个算法封装起来, 并且使它们可相互替换。

    个人觉得,一定程度上说,策略模式就是组合的简单实用场景。如,鸭子的"叫"行为,不同的鸭子这种行为变现不同,有的呱呱叫,有的不会叫,我们把这种行为设置为一个接口,然后定义几种不同的叫的实现,以组合的方式注入到不同的鸭子里。策略模式常见到都不能认为是一种模式了,已经是一种通用的编码方式了。

    观察者模式

    有时被称作发布/订阅((pub/sub))模式,观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态发生变化时,会通知所有观察者对象,使它们能够自动更新自己。

    在发布订阅模式的说法中,发布者发布pubscribe消息,订阅者订阅subscribe消息。

    在观察者模式的说法中,分为主题(Subject),观察者(Observer)。

    其中主题(Subject)的接口是:

    • 增加观察者(Observer接口)
    • 移除观察者
    • 向观察者(们)发出通知

    观察者(Observer)的接口是:

    • update方法。接收主题的通知。

    java内置了观察者模式,其中:

    java.util.Observable代表主题。方法如下:

    构造方法摘要

    Observable()
    构造一个带有零个观察者的 Observable。

     

     

    方法摘要

    void

    addObserver(Observer o)
    如果观察者与集合中已有的观察者不同,则向对象的观察者集合中添加此观察者。

    protected void

    clearChanged()
    指示对象不再改变,或者它已对其所有的观察者通知了最近的改变,所以 hasChanged 方法将返回 false。

    int

    countObservers()
    返回 Observable 对象的观察者数目。

    void

    deleteObserver(Observer o)
    从对象的观察者集合中删除某个观察者。

    void

    deleteObservers()
    清除观察者列表,使此对象不再有任何观察者。

    boolean

    hasChanged()
    测试对象是否改变。

    void

    notifyObservers()
    如果 hasChanged 方法指示对象已改变,则通知其所有观察者,并调用 clearChanged 方法来指示此对象不再改变。

    void

    notifyObservers(Object arg)
    如果 hasChanged 方法指示对象已改变,则通知其所有观察者,并调用 clearChanged 方法来指示此对象不再改变。

    protected void

    setChanged()
    标记此 Observable 对象为已改变的对象;现在 hasChanged 方法将返回 true。

     

     

    public interface Observer接口代表观察者。方法如下:

     

    方法详细信息

    update

    void update(Observable o,

    Object arg)

    只要改变了 observable 对象就调用此方法。应用程序调用 Observable 对象的 notifyObservers 方法,以便向所有该对象的观察者通知此改变。

    参数:

    o - observable 对象。

    arg - 传递给 notifyObservers 方法的参数。

     

     

     

  • 相关阅读:
    C#使用 System.Net.Mail发送邮件功能
    移动H5前端性能优化指南
    chrome主页被篡改为hao123 win10系统
    jqGrid TreeGrid 加载数据 排序 扩展
    Dapper 链式查询 扩展
    T4 代码生成 Demo (抽奖程序)
    反射实现 Data To Model
    highcharts .net导出服务 和 两种导出方式
    jQuery 自定义插件 (分页控件)
    ajax 多级联动 下拉框 Demo
  • 原文地址:https://www.cnblogs.com/xiaolang8762400/p/7327904.html
Copyright © 2011-2022 走看看