Head First设计模式 1 设计模式入门 策略模式 观察者模式
关于基本的OOP特征:
OOP的几大特征是抽象 继承 封装 多态。
我们把共同的部分抽象出来作为抽象类的存在,使用继承和接口来实现多态,然后私有的部分封装起来。一定程度上说,这些概念都是简单的设计模式。
设计原则1:
找出应用中可能需要变化的部分,把他们独立出来,不要和那些不需要变化的部分融合在一起。
设计原则2:
针对接口编程,而不是针对实现编程。
这里的接口包含抽象类。
设计原则3:
多用组合 少用继承。
组合和继承都能作为将不变的代码和变化的代码分开的方式,但是组合更加灵活,可以将一个依赖的行为封装为一个类,然后通过接口的方式引入,这样不会依赖于类的层级结构,而且可以在运行的时候动态改变(通过set方法改变依赖的组合对象)。
通俗的讲,继承是一种"是一个"的关系,组合是一种"有一个"的关系,大部分情况下我们需要的都是"有一个"。
策略模式:
定义一系列的算法,把每一个算法封装起来, 并且使它们可相互替换。
个人觉得,一定程度上说,策略模式就是组合的简单实用场景。如,鸭子的"叫"行为,不同的鸭子这种行为变现不同,有的呱呱叫,有的不会叫,我们把这种行为设置为一个接口,然后定义几种不同的叫的实现,以组合的方式注入到不同的鸭子里。策略模式常见到都不能认为是一种模式了,已经是一种通用的编码方式了。
观察者模式
有时被称作发布/订阅((pub/sub))模式,观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态发生变化时,会通知所有观察者对象,使它们能够自动更新自己。
在发布订阅模式的说法中,发布者发布pubscribe消息,订阅者订阅subscribe消息。
在观察者模式的说法中,分为主题(Subject),观察者(Observer)。
其中主题(Subject)的接口是:
- 增加观察者(Observer接口)
- 移除观察者
- 向观察者(们)发出通知
观察者(Observer)的接口是:
- update方法。接收主题的通知。
java内置了观察者模式,其中:
java.util.Observable类代表主题。方法如下:
|
构造方法摘要 |
|
|
Observable() |
|
|
方法摘要 |
|
|
void |
addObserver(Observer o) |
|
protected void |
clearChanged() |
|
int |
countObservers() |
|
void |
deleteObserver(Observer o) |
|
void |
deleteObservers() |
|
boolean |
hasChanged() |
|
void |
notifyObservers() |
|
void |
notifyObservers(Object arg) |
|
protected void |
setChanged() |
public interface Observer接口代表观察者。方法如下:
|
方法详细信息 |
update
void update(Observable o,
Object arg)
只要改变了 observable 对象就调用此方法。应用程序调用 Observable 对象的 notifyObservers 方法,以便向所有该对象的观察者通知此改变。
参数:
o - observable 对象。
arg - 传递给 notifyObservers 方法的参数。
Head First设计模式 1 设计模式入门 策略模式 观察者模式的更多相关文章
- 设计模式入门,策略模式,c++代码实现
// test01.cpp : Defines the entry point for the console application.////第一章,设计模式入门,策略模式#include &quo ...
- JavaScript设计模式与开发实践 - 策略模式
引言 本文摘自<JavaScript设计模式与开发实践> 在现实中,很多时候也有多种途径到达同一个目的地.比如我们要去某个地方旅游,可以根据具体的实际情况来选择出行的线路. 如果没有时间但 ...
- Java设计模式(18)策略模式(Strategy模式)
Strategy是属于设计模式中 对象行为型模式,主要是定义一系列的算法,把这些算法一个个封装成单独的类. Stratrgy应用比较广泛,比如,公司经营业务变化图,可能有两种实现方式,一个是线条曲线, ...
- php设计模式课程---6、策略模式如何使用
php设计模式课程---6.策略模式如何使用 一.总结 一句话总结:比如代码需求,做一饭店,有南北方不同菜系,不同分店有不同的饭菜汤的需求,代码怎么设计 从饭店有特色过渡到厨师有特色(南方厨师(南方饭 ...
- php设计模式-------(1)策略模式
一.为什么我要学习设计模式. 我的上一个项目是做App接口,由于时间紧,老板催的急,所以到最后项目完工时发现居然写了几万行代码,可想而知代码质量有多糟糕.而且很多时候,调用接口的开发人员来找我说某个接 ...
- 【HeadFirst 设计模式总结】1.策略模式
1.书中举了一个鸭子类的设计,有些会飞或者会叫,有些不会飞可能也不会叫,用继承则导致不该有的功能通过继承而继承了下来,使用接口则代码无法做到最大程度的重用.进而引出设计原则1:找出应用中可能需要变化之 ...
- head first 设计模式读书笔记 之 策略模式
作为一个php开发者,深知曾经很多程序员都鄙视php,为什么呢?因为他们认为php的语法是dirty的,并且由于开发者水平参差不齐导致php的代码更加乱上加乱,维护起来简直一坨shit一样.随着php ...
- headfirst设计模式(1)—策略模式
什么是策略模式 策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换.策略模式让算法独立于使用它的客户而独立变化(摘自百度百科) 关键字:算法封装,相互替换,独立变化 算法封装 ...
- javascript设计模式详解之策略模式
接上篇命令模式来继续看下js设计模式中另一种常用的模式,策略模式.策略模式也是js开发中常用的一种实例,不要被这么略显深邃的名字给迷惑了.接下来我们慢慢看一下. 一.基本概念与使用场景: 基本概念:定 ...
随机推荐
- php 通过mysqli 操作数据库mysql
目录 php mysqli 操作数据库 连接数据库 通过mysqli 创建数据库 通过mysqi 创建数据表 通过mysqli向数据表中插入信息 通过mysqli 读取数据 where语句的应用 通过 ...
- bash: ./vmware-install.pl: /user/bin/perl: 坏的解释器:没有那个文件或目录
----------------安装VMwere Tools------------------------bash: ./vmware-install.pl: /usr/bin/perl: bad ...
- Linux编辑网络连接
Linux编辑网络连接 实验目标: 通过本实验掌握新建网络连接.修改hosts文件.修改主机名的方法. 实验步骤: 1.新建一个名为review的网络连接,并配置ip地址,启用新连接 2.修改ho ...
- OpenStack组件——cinder存储服务
1.cinder 介绍 1)理解 Block Storage 操作系统获得存储空间的方式一般有两种: (1)通过某种协议(SAS,SCSI,SAN,iSCSI 等)挂接裸硬盘,然后分区.格式化.创建文 ...
- 【DSP开发】C6000非多核非KeyStone系列DSP中断系统
C6000系列DSP的中断系统 上一篇介绍了C6455的GPIO系统,最后把GPIO4配置成了中断/事件模式,本文将介绍C6455的中断系统,介绍完基本概念后,给出把GPIO4映射到INT4的代码. ...
- inner join on会过滤掉两边空值的条件
前两天工作过程中,遇到一个问题,关于join on查询的,对于查出来的结果一直都很疑惑,这里记录一下. 1.首先看下面这条sql查询语句: 查询出来的结果是25053 2.加个 o.lat = n.l ...
- 解决ubuntu命令行中文乱码
解决方法: 1.安装zhcon 登入用户后,输入 1 sudo apt-get install zhcon 2.启动zhcon 输入 1 zhcon --utf8 PS:zhcon支持中文输入法,按 ...
- p1000 A+B问题
题目描述 Description 输入两个整数A和B,输出他们的和 输入描述 Input Description 输入为一行,包含两个整数A,B.数据保证A与B都在2^31-1的范围内 输出描述 Ou ...
- SqlServer中union 和 union all的区别
⒈UNION和UNION ALL关键字都是将两个结果集合并为一个,但这两者从使用和效率上来说都有所不同.⒉对重复结果的处理:UNION在进行表链接后会筛选掉重复的数据,UNION ALL不会去除重复的 ...
- Win10开机后内存突然飙升
欢迎关注微信公众号:猫的尾巴有墨水 Win10开机后内存突然飙升 先停掉Windows Update自动更新 停掉同步主机,也就是同步服务