Head First Design pattern Observer

Head First Design Patterns Source Code for Java8 head first design patterns 设计模式 2014年根据Java8更新后的源代码 立即下载
     翻开Head First 设计模式看了下,第一章观察者模式,看地 不甚明了,学java 已经有一段时间了,这是我第三次翻看这本书,前些日子,买的编程珠玑,与程序员思维也都没能读下来,于是从网上了找了段代码看了下,感觉简洁明了,重点突出,比书中引导式学习强了许多。
     先看代码要比之后再看类图代码结构效果要好很多。下面举个案例
      实例描述:客户支付了订单款项,这时财务需要开具发票,出纳需要记账,配送员需要配货。
      代码实现:
/// <summary>
    /// 抽象观察者
    /// </summary>
    public interface ISubject
    {
        void Notify();
    }

    /// <summary>
    /// 工作岗位,作为这里的观察者的抽象
    /// </summary>
    public abstract class JobStation
    {
        public abstract void Update();
    }

    /// <summary>
    /// 具体主题,这里是客户
    /// </summary>
    public class Customer : ISubject
    {
        private string customerState;

        private IList<JobStation> observers = new List<JobStation>();

        /// <summary>
        /// 增加观察者
        /// </summary>
        /// <param name="observer"></param>
        public void Attach(JobStation observer)
        {
            this.observers.Add(observer);
        }

        /// <summary>
        /// 移除观察者
        /// </summary>
        /// <param name="observer"></param>
        public void Detach(JobStation observer)
        {
            this.observers.Remove(observer);
        }

        /// <summary>
        /// 客户状态
        /// </summary>
        public string CustomerState
        {
            get { return customerState; }
            set { customerState = value; }
        }

        public void Notify()
        {
            foreach (JobStation o in observers)
            {
                o.Update();
            }
        }
    }

    /// <summary>
    /// 会计
    /// </summary>
    public class Accountant : JobStation
    {
        private string accountantState;
        private Customer customer;

        public Accountant(Customer customer)
        {
            this.customer = customer;
        }

        /// <summary>
        /// 更新状态
        /// </summary>
        public override void Update()
        {
            if (customer.CustomerState == "已付款")
            {
                Console.WriteLine("我是会计,我来开具发票。");
                accountantState = "已开发票";
            }
        }
    }

    /// <summary>
    /// 出纳
    /// </summary>
    public class Cashier : JobStation
    {
        private string cashierState;
        private Customer customer;

        public Cashier(Customer customer)
        {
            this.customer = customer;
        }

        public override void Update()
        {
            if (customer.CustomerState == "已付款")
            {
                Console.WriteLine("我是出纳员,我给登记入账。");
                cashierState = "已入账";
            }
        }
    }

    /// <summary>
    /// 配送员
    /// </summary>
    public class Dilliveryman : JobStation
    {
        private string dillivierymanState;
        private Customer customer;

        public Dilliveryman(Customer customer)
        {
            this.customer = customer;
   `
      public override void Update()
        {
            if (customer.CustomerState == "已付款")
            {```
`

“` sole.WriteLine(“我是配送员,我来发货。”);
dillivierymanState = “已发货”;
}
}
}
客户端代码:
class Program
{
static void Main(string[] args)
{

        Customer subject = new Customer();

        subject.Attach(new Accountant(subject));
        subject.Attach(new Cashier(subject));
        subject.Attach(new  
  }// 看完代码不难发现,其实观察者模式无非就是在客户类中增加了一个 
  //盛JobStation抽象类集合的属性,利用多态可以接收不同的子类对象,在这个客户类中可以通过集合add,和remove 方法实现删除和添加观察者,在客户类中,遍历集合调用抽象类实现类的update Dilliv。
  ryman(subject));

        subject.CustomerState = "已付款";
        subject.Notify();

        Console.Read();
    }
} 方法实现通知。
保姆级教程:在树莓派4B上用V4L2驱动USB摄像头(附完整代码) 本文提供树莓派4B上使用V4L2驱动USB摄像头的完整教程,涵盖环境配置、V4L2架构解析、代码实现及问题排查。通过详细步骤和完整代码示例,帮助开发者快速掌握嵌入式Linux下的摄像头驱动开发,解决实际应用中的兼容性和性能问题。 阅读详情

相关推荐

modbus-esp8266库深度解析:工业级Modbus协议栈实现

Modbus是一种广泛应用于工业自动化领域的通用串行通信协议,其核心在于标准化的功能码、寄存器模型与帧结构设计。基于RTU、ASCII和TCP三种传输变体,Modbus协议通过主从架构实现设备间可靠数据交互,具备低开销、高兼容性与强实时性等技术价值。在边缘计算与工业物联网场景中,它被广泛用于PLC通信、传感器数据采集、HMI集成及远程固件升级(FOTA)等关键任务。针对ESP8266/ESP32等Wi-Fi微控制器平台,modbus-esp8266库提供了完整协议栈支持,涵盖多实例并发、回调驱动架构、零拷贝

weixin_42315569的博客 351

Java中的观察者模式

观察者模式的定义了对象之间的一对多依赖,这样一来,当一个对象改变状态时,它的所有依赖者都会收到通知并自动更新 假设现在有一个需求,客户支付了订单款项,这时财务需要开具发票,出纳需要记账,配送员需要配货 观察者接口 package com.zw.mymaven; //抽象观察者角色 public interface Watcher { public void update(); } 主题

张巍的博客 362

cosi-corr操作详细步骤

cosi-corr是一个可以加载到ENVI的软件包,由加利福尼亚理工学院的François Ayoub,  Sébastien Leprince,  and Lionel Keene开发,并且提供源代码,该软件受到了NSF的资助。软件的主要功能是可以满足各种影响的正射校正和影像配准。 针对下载下来的软件包参考《cosi-corr_guide.pdf》,进行配置使用具体详细过程如下: (本机环境

u013299471的专栏 1万+

Head First Design Patterns 阅读笔记之二: Observer Pattern

从一款天气预报 APP 开始假设现在需要编写一款 APP,可以显示感应器传来的当前天气条件(温度、湿度、气压),报告当前的天气状况统计数据并做简单的预测。现在已知以下条件: WeatherData 类有三个 getter 方法来获取当前的数据:getTemperature()、getHumidity()、getPressure()。 WeatherData 类中有一个方法 measurementsC

ryanloucc的博客 619

【3D目标检测】激光雷达和相机联合标定(一)——ROS同步解包

激光雷达和相机联合标定(一)——ROS同步解包

qq_44703886的博客 4236

AXI总线的Burst Type以及地址计算 | WRAP到底是怎么一回事?

AXI总线的transaction是burst-based的,因此有必要好好研究一下不同burst type的工作原理。此处略过burst的定义以及burst size、burst length等信号的介绍。

qiuzhongyu123的博客 2万+

<Head First Design Pattern> Chapter 2. Observer Pattern

Design Principle Strive for loosely coupled designs between objects that interact. Observer Pattern One Subject + Many Observers = Observer Pattern The Observer Pattern defines a one-to-many dependency between objects so that when one object changes stat

weixin_44450684的博客 189

代码复现3—VLN-CE

运行训练完后在 data文件下会自动生成一个“checkpoints”文件,文件下包含任务文件“seq2seq”,该文件下会包括训练出来的权重和评估结果。数据集下载完后路径提取:data/scene_datasets/mp3d/{scene}/{scene}.glb。注意这里下载的数据集并不是所有的matterport3d,只需要一部分,包含90个场景,大小压缩后约16G。在“eval”时,会在data文件下生成videos文件,里面存放的是可视化的轨迹视频。

qq_44100524的博客 3203

Head First Design Patterns - Observer Pattern

The Observer Pattern defines a one-to-many dependency between objects so that when one object changes state, all of its dependents are notified and updated automatically. The Observer Pattern define...

weixin_30629977的博客 108

【WebRTC】【Unity】Unity Web RTC1-Unity中简单实现远程画面

平台:基本常用平台包括安卓,苹果(max和IOS),Windows64,Linux都行。10. 注意,如果从移动设备浏览器连接服务,信令服务器的SSL证书一定要先设好。想要在Unity中实现实时远程桌面,找到了Render Streaming这个手段,本篇介绍相应的使用方法和实例。8. 打开电脑浏览器,地址栏输入http://127.0.0.1,点击Receiver Sample。新建Unity项目,模板选Third Person,Project Name随意。启动App,控制台出现如下信息表示成功。

每日出拳老爷子的博客 2518

MATLAB和S7-1200PLC水箱液位高度PID控制联合仿真(KEPserverOPC通信应用)

SMART PLC 向导PID的详细介绍请查看下面文章链接:S7-200 SMART PLC PID向导详细介绍(如何实现P、PD、PID控制器)-优快云博客文章浏览阅读1k次。这篇博客主要介绍SMART PLC PID向导的使用,PID控制相关的其它内容请查看专栏系列文章,常用链接如下:SMART PLC PID负压控制(过程量为负数)_负压控制pid控制程序_RXXW_Dor的博客-优快云博客1、如何实现PID反作用调节?S7-1200PLC和KEPserver OPC通信-优快云博客。

RXXW_Dor的博客 1782

Head First Design Pattern读书笔记二 Observer Pattern

The Observer Pattern defines a one-to-many dependency between objects so that when one object changes state,all of its dependents are notified and updated automatically.The Observer Pattern provides a

fair的专栏 1084

Android 车载应用之快速入门

车载 Android 系统也被称为 Android Automotive OS,是对原始 Android 系统的一个功能扩充版本。与手机系统一样,Android Automotive OS 源代码完全开放,第三方供应商和汽车制造商可以官方源码的基础上自行开发和拓展,无论是编程语言还是各项接口,都与 Android 系统保持了一致。

xiangzhihong8的专栏 1113

学习Head First Design Pattern——翻译Chapter 2:The Observer Pattern

学习Head First Design Pattern——翻译Chapter 2:The Observer Pattern Page 37 图片〉〉 嗨Jerry,模式组讨论已经推迟到星期六的晚上了,我正要通知大家呢。这次我们将讨论OBSERVER模式,这个模式真的很棒,真的

logicmess 3372

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Head First 设计模式 Design Pattern 1-2 Strategy, Observer

Section 1 策略模式 Strategy 模式:经验复用, 软件开发是在不断调整改变的 设计原则 找出应用中需要变化的部分, 把他们从不需要变化的代码中独立(封装)出来;  >分开变化和不变的部分, 代码变化引起的影响小, 系统有弹性 设计原则 针对接口编程, 不是针对实现编程 >利用接口表示行为, 针对超类型(Supertype)编程, 利用多态 设计原则

Fix it 1498

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

Head First Design Pattern - 2 - A Subject and Observer spar

这实际上是对Observer模式中使用push方式还是pull方式的讨论,我从第一句话就开始笑个不停了,你要不要来试试看? Subject: I'm glad we're finally getting a chance to chat in person. Observer: Really? I thought you didn't care much about us Observers. ...

AllenYoung 137

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

One onte of Head first design patterns(Observer pattern)

I read the chapter two of  Head first design pattern just now,next ,i will just make a record.         This chapter tells us how to use the observer pattern.after read it ,i realized that   the observ...

信心,恒心,野心,爱心兼具者,可谓准成功人士! 201

《Head First Design Patterns》笔记二:观察者模式(Observer Pattern)

 第二篇 观察者模式    好久没写文章了,为我的懒惰害臊一下.    首先还是需求,我们现在有个新项目,做一个气象站的项目,负责提供气象资料(temperature, humidity, pressure)  给天气显示板,这里有2个显示板,一个是状态显示板,一个统计显示板.ok,这个很简单,我们立马开始动手做uml图 每当气象站获得新信息的时候,就开始调用Updat

imfzp的专栏 1645

OOP Design (Head First Design Patterns) 学习笔记--03 Observer Pattern

Meet the Observer Pattern Publishers + Subscribers = Observer Pattern We call the publisher the SUBJECT, and the subscribers the OBSERVERS.

OlympianZ的专栏 970

Head First Design Pattern - 2 - A Subject and Observer spar over the right way to get state informat...

这实际上是对Observer模式中使用push方式还是pull方式的讨论,我从第一句话就开始笑个不停了,你要不要来试试看? Subject: I'm glad we're finally getting a chance to chat in person. Observer: Really? I thought you didn't care much about us Obs...

A15755509720000的博客 132

设计模式之 观察者模式 the observer design pattern ---------《head first design pattern》

观察者模式适用于当某个对象的状态发生改变的时候,其他关联的对象也随之改变。想象一下rss订阅,当你订阅的rss有更新时,你就会收到新的内容。 本文参考了head first design pattern这本书。模拟气象站。 业务需求:现在手上有三个不同的产品。一个实时播报的气象显示器,一个基于预测的气象显示器,一个基于统计学的气象显示器。气象数据都来源于气象站,如果气象站数据更新,这三个不同的...

weixin_30559481的博客 145

Head First设计模式之观察者模式(Observer Pattern)

前言:     这一节开始学习观察者模式,开始讲之前会先像第一节那样通过一个应用场景来引入该模式。具体场景为:气象站提供了一个WeatherData对象,该对象可以追踪获取天气的温度、气压、湿度信息,WeatherData对象会随即更新三个布告板的显示:目前状况(温度、湿度、气压)、气象统计和天气预报。1.   基本需求:利用WeatherData对象获取数据、并更新三个布告板:目前状况、气象统计

xuemoyao的专栏 3117

Book Review about Head First Design Pattern 2

Principle 4: Strive for loosely coupled designs between objects that interactObserver Pattern:关键是subject的数据怎样传递给Observer,是直接在方法参数中传递还是让Observer通过getter来取。如果数据少,通过参数传递比较方便,但是有可能每个Observer所需要的数据不一样,造成

wangjiong的专栏 973

Head First Design Patterns读书笔记及C++版代码(一):观察者(Observer)模式

Head First Design Patterns读书笔记及C++版代码(一):观察者(Observer)模式粟卫民  http://www.gisdev.cn/   http://blog.youkuaiyun.com/suen/ 日期:2008-9-18保留所有版权。如需转载,请联系作者,并在醒目位置注明出处《Head First Design Patterns》是Kathy Sierra和

地理信息,无处不在 3166

HeadFirst design pattern笔记-观察者模式

在实现观察者模式前,先看一个天气预报系统的需求,WeatherData对象负责获取天气数据(温度,湿度,压力),然后显示在公告板上,公告板可以有很多种类型。 不使用设计模式的做法: public class WeatherData { //气象测量更新数据时,此方法调用 public void measurementsChanged() { //当前温度 flo

oHeHeHou的专栏 1037

《HeadFirstDesignPattern》笔记:观察者模式

观察者模式 观察者模式:定义了对象之间的一对多依赖,这样一来,当一个对象改变状态时,它的所有依赖着都会受到通知并自动更新 观察者模式定义了一系列对象之间的有一对多关系 当一个对象改变状态,其他依赖着都会收到通知 类图 松耦合的威力 当两个对象之间松耦合,它们依然可以交互,但是不太清除彼此的细节。 观察者模式提供了一种对象设计,让主题和观察者额之间松耦合 设计原则 为了交互对象之间的松耦合设计而努...

cjdjcdj的博客 169
上一篇: Android适配器详解
下一篇: Android Animation AS下动画实现
一朵红杏
博客等级 码龄12年 51粉丝 282原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值