Head First 设计模式 —— 15. 与设计模式相处
模式
是在某情境(context)下,针对某问题的某种解决方案。 P579
- 情景:应用某个模式的情况
- 问题:你想在某情境下达到的目标,但也可以是某情境下的约束
- 解决方案:一个通用的设计,用来解决约束、达到目标
模式必须应用于一个重复出现的问题。 P581
思考题
配对下列模式和描述: P587
- 装饰器模式:包装一个对象,以提供新的行为
- 状态模式:封装了基于状态的行为,并使用委托在行为之间切换
- 迭代器模式:在对象的集合之中游走,而不暴露集合的实现
- 外观模式:简化一群类的接口
- 策略模式:封装可以互换的行为,并使用委托来决定要使用哪一个
- 代理模式:包装对象,以控制对此对象的访问
- 工厂方法模式:由子类决定要创建的具体类是哪一个
- 适配器模式:封装对象,并提供不同的接口
- 观察者模式:让对象能够在状态改变时被通知
- 模板方法模式:由子类决定如何实现一个算法中的步骤
- 组合模式:客户用一致的方式处理对象集合和单个对象
- 单例模式:确保有且只有一个对象被创建
- 抽象工厂模式:允许客户创建对象的家族,而无需指定他们的具体类
- 命令模式:封装请求成为对象
模式分类
创建型:涉及到将对象实例化,这类模式都提供一个方法,将客户从所需要的实例化的对象中解耦P590
行为型:涉及到类和对象如何交互及分配职责P590
结构型:可以让你把类或对象组合到更大的结构中 P590
本书中未提到的模式在附录中有简要介绍,感觉简单两页还是难以理解(我才不会说第一个都看得有点懵),等以后看《设计模式》再继续学习。先把学到的这些巩固一下并进行实践。
在写本次读书笔记的时候才大量用到图片,以前都是保存先手动到图床文件夹的笔记中,然后获取图片链接,最后粘贴到 md笔记的指定位置。这个用多了就感觉每次挺麻烦,还需要打开切换到不同的笔记,就想模拟手动操作自动完成这一些列操作,最后解析了大部分 api 后,就直接就“替换了” md笔记里上传图片的会员功能。最后整理成 tampermonkey 脚本,详见 有道云笔记增强 。
本文首发于公众号:满赋诸机(点击查看原文) 开源在 GitHub :reading-notes/head-first-design-patterns
Head First 设计模式 —— 15. 与设计模式相处的更多相关文章
- c++设计模式15 --组合模式
今天研究了一下设计模式15 组合模式 本人是菜鸟一枚,所以一开始完全不懂组合究竟是什么意思.先上图一张,树形结构图: 文档说,如果想做出这样的结构,通常考虑组合模式.那是为什么呢?现在让我们看一下组合 ...
- C#设计模式(0)-认识设计模式
简介 世界上本没有路,走的人多了也就成了路:世界上本来没有设计模式.用的人多了,也就成了设计模式.所以,我们不是严格按照它的定义去执行,可以根据自己的实际场景.需求去变通.领悟了其中的思想,实现属于自 ...
- javaScript设计模式-创建型设计模式
我们大家一听到设计模式就感觉设计模式是一个高端的东西,到底什么是设计模式呢?其实设计模式也就是我们的前辈在写代码的时候遇到的问题,提出的解决方案,为了方便人与人之间的交流,取了个名字,叫做设计模式. ...
- GOF提出的23种设计模式是哪些 设计模式有创建形、行为形、结构形三种类别 常用的Javascript中常用设计模式的其中17种 详解设计模式六大原则
20151218mark 延伸扩展: -设计模式在很多语言PHP.JAVA.C#.C++.JS等都有各自的使用,但原理是相同的,比如JS常用的Javascript设计模式 -详解设计模式六大原则 设计 ...
- C#设计模式总结 C#设计模式(22)——访问者模式(Vistor Pattern) C#设计模式总结 .NET Core launch.json 简介 利用Bootstrap Paginator插件和knockout.js完成分页功能 图片在线裁剪和图片上传总结 循序渐进学.Net Core Web Api开发系列【2】:利用Swagger调试WebApi
C#设计模式总结 一. 设计原则 使用设计模式的根本原因是适应变化,提高代码复用率,使软件更具有可维护性和可扩展性.并且,在进行设计的时候,也需要遵循以下几个原则:单一职责原则.开放封闭原则.里氏代替 ...
- [Head First设计模式]生活中学设计模式——迭代器模式
系列文章 [Head First设计模式]山西面馆中的设计模式——装饰者模式 [Head First设计模式]山西面馆中的设计模式——观察者模式 [Head First设计模式]山西面馆中的设计模式— ...
- [Head First设计模式]生活中学设计模式——组合模式
系列文章 [Head First设计模式]山西面馆中的设计模式——装饰者模式 [Head First设计模式]山西面馆中的设计模式——观察者模式 [Head First设计模式]山西面馆中的设计模式— ...
- [Head First设计模式]生活中学设计模式——外观模式
系列文章 [Head First设计模式]山西面馆中的设计模式——装饰者模式 [Head First设计模式]山西面馆中的设计模式——观察者模式 [Head First设计模式]山西面馆中的设计模式— ...
- [Head First设计模式]生活中学设计模式——状态模式
系列文章 [Head First设计模式]山西面馆中的设计模式——装饰者模式 [Head First设计模式]山西面馆中的设计模式——观察者模式 [Head First设计模式]山西面馆中的设计模式— ...
随机推荐
- 如何写好商用PPT,计算机行业PPT模板
如何写好商用PPT,这个问题如果从0开始写那确实需要花费一番功夫,今天我不是来教你如何做PPT,而是教你如何从一个小白如何快速能套用模板,从而做出一个自己行业相关的模板,比如计算机行业PPT模板,奶茶 ...
- 使用OpenSSL自建一个HTTPS服务
1. 理论知识 1.1 什么是https 传统的 HTTP 协议以明文方式进行通信,不提供任何方式的数据加密,很容易被中间攻击者破解通信内容或者伪装成服务器与客户端通信,在安全性上存在很大问题. HT ...
- PHP语言基础知识
目录 前言 第一章 PHP语言学习介绍 1.1 PHP部署安装环境 1.2 PHP代码工具选择 第二章 PHP代码基本语法 2.1 PHP函数知识介绍 2.2 PHP常量变量介绍 2.2.1 PHP变 ...
- Vue-组件化,父组件传子组件常见传值方式
前言 我们都知道vue核心之一:组件化,vue中万物皆组件,组件化我认为应该来至于模块化的设计思想,比如在模块化开发中,一个模块就是一个实现特定功能的独立的文件,有了模块我们就更方便去阅读代码,更方便 ...
- Mysql8.0新特性【详细版本】
1. 账户与安全 用户创建与授权 之前:创建用户并授权 1 grant all privileges on *.* to 'myuser'@'%' identified by '3edc#EDC'; ...
- torch中squeeze与unsqueeze用法
import torch torch中的squeeze与unsqueeze作用是去除/添加维度为1的行 例如,a=torch.randn(2,3) 那么b=a.unsqueeze(0),b为(1,2, ...
- 牛客挑战赛46 D
题目链接: 数列 查询有多少\([l,r]\)区间满足每个数出现\(k\)的倍数次 即为\(1\)到\(r\)与\(1\)到\(l-1\)每个数相减的次数为\(k\)的倍数次 可以使用哈希维护 记录每 ...
- pandas的学习2-选择数据
import pandas as pd import numpy as np dates = pd.date_range('20130101', periods=6) df = pd.DataFram ...
- C++模板元编程----快速排序
目录 目录 简介 实现 数据结构定义 在数组前添加一个元素 判断 分堆 合并 快速排序的实现 总结 简介 上一篇使用C++模板模板实现了一个选择排序.这一次,更进一步的,实现了一个快速排序算法.关于快 ...
- 解决uiautomator截取不到手机App界面信息
今天在使用uiautomatorviewer进行安卓app控件定位的时候,出现以下异常,(用的是真机测试Android版本是10,据说是Android 8以后sdk自带的uiautomator直接打开 ...
