首页 > 其他分享 >读书笔记:Head First 设计模式

读书笔记:Head First 设计模式

时间:2024-09-14 21:46:50浏览次数:11  
标签:Head 封装 读书笔记 对象 适配器 模式 实例 设计模式

HeadFirst设计模式 Eric Freeman

PDF下载(亲测有效):https://baijiahao.baidu.com/s?id=1756899911272841212&wfr=spider&for=pc

前言

如何使用本书

一些Head First学习原则:

  1. 可视化。图片更容易让人记住,文字放图片里
  2. 使用会话式和个人化风格。会话式讲述内容。
  3. 让学习者想得更深
  4. 引起并保持读者的注意。大脑注意的是意料之外的东西
  5. 触动读者的情绪。记住东西依赖于情感内容。

学习方法:

  1. 慢一点。你理解的越多,要记的就越少
  2. 做练习。自己做笔记
  3. 阅读“没有蠢问题”
  4. 你放下书后要有空间让大脑处理消化
  5. 喝水
  6. 大声说出来,解析给别人听
  7. 倾听大脑的声音,达到刚看就忘的点就休息
  8. 融入到故事中
  9. 设计实践

源代码:http://wickedlysmart.com/head-first-design-patterns

1 欢迎来到设计模式:设计模式介绍 1

有人已经解决过你的问题
继承:Duck类,橡皮鸭子也开始飞
接口:fly()从Duck类拿出做成单独接口

取出变化的部分,并把它“封装”起来,这样它就不会影响其他代码

没有蠢问题:问,答

2 让你的对象保持消息灵通:观察者模式 37

出版者 + 订阅者 = 观察者模式

出版者:主题 subject
订阅者:观察者 observer

3 装饰对象:装饰者模式 79

4 用OO的精髓做烘焙:工厂模式 109

制造对象,不仅只有使用new操作符。
当使用new操作符时,无疑是在实例化一个具体类。

Duck duck = new MallardDuck()
抽象类保持代码弹性    创建一个具体类的实例

通过类型参数决定实例化具体类

if(type.equals("chesse")){
	Pizza = new chessePizza();
}

接下来就会不断修改这部分代码
区别哪些代码不会改变,封装
好处就是把问题推迟到另一个对象
简单工厂

定义工厂方法模式

工厂方法模式:子类决定要实例化哪个类。“决定”就是指用那个子类创建实例化产品。

依赖倒置原则

依赖抽象,不依赖具体类
pizzastore 高层组件 依赖 pizza抽象类,mystrlepizza低层组件

5 独一无二的对象:单件模式 169

独一无二的对象

public static synchronized
              同步,线程进入此方法前要先等待轮询到它
              但同步导致性能开销大

6 封装调用:命令模式 191

封装调用

把小块计算包装成形,以便调用计算的对象不需要操心如何做事情

命令模式简介

  1. 顾客把订单给女招待
  2. 女招待把订单给柜台。女招待只管传递订单
  3. 厨师根据订单准备餐点

撤销按钮

undo() 方法
用undocommand记住上一条命令

命令模式的更多用途:请求队列

日志请求

添加store() load()记录操作日志与恢复

7 随遇而安:适配器和外观模式 237

适配器模式解析

适配器实现目标接口,并持有被适配者的实例

定义适配器模式

将一个类的接口转换成客户期望的另一个接口

现实世界的适配器

枚举器
迭代器

观赏电影(困难方式)

看电影,需要执行一系列任务

灯、相机、外观

外观类把家庭影院组件看作子系统。

定义外观模式

为子系统中的一组接口提供了一个统一的接口
最重要的事情之一是务必记得模式示意图。

最少知识原则

只和你的密友谈话
所有设计都有折中:抽象与速度。空间与实践。原则是指南

8 封装算法:模板方法模式 277

抽象coffee和tea

两份冲泡法都遵循相同的算法
把冲泡步骤抽象

final void prepareRecipe(){// 模板
	brew();
	addCondiments(); // 加调料
}
abstract void addCondiments();

抽象出公共部分
模板方法定义一个算法的步骤,允许子类提供一个或多个步骤的实现。

好莱坞原则

不要打电话(调用)给我,我会打电话(调用)给你
举例:饮料的客户依赖模板方法类,不依赖具体Tea类,只有需要实例化时才调用子类方法。

9 管理良好的集合:迭代器和组合模式 317

有很多方法可以把对象堆起来成为集合。数组,栈,列表。但这些会把内部实现展示给客户。
迭代器封装了内部的循环遍历

定义迭代器模式

提供一种方式,访问聚合对象中的元素而不暴露其潜在实现

单一责任原则

一个类应该只有一个变化的原因。类的每个责任都是一个潜在变化的区域

定义组合模式

允许你将对象组合成树形结构来表现部分-整体层次结构。

10 事物的状态:状态模式 381

鲜为人知的事实:策略和状态模式是双胞胎,刚出生就分开了。

状态模式定义

对象在内部状态改变时改变其行为,对象看起来好像改变了它的类。

11 控制对象访问:代理模式 425

你是一个白脸,和蔼友善。但你不希望每个人都叫你做事。因此找了个黑脸控制对你的访问。

远程代理的角色

客户对象调用本地“代理”对象上的方法,代理对象处理所有网络通信的低层细节。

Java RMI概况

RMI命名:RMI将客户辅助对象称为stub(桩),服务辅助对象称为skeleton(骨架)

定义代理模式

为另一个对象提供一个替身或占位符来控制对这个对象的访问。
使用代理模式创建代表对象。代表对象控制对另一个对象的访问,被代表的对象可以是远程的对象,创建开销大的对象或需要安全控制的对象。

虚拟代理(virtual proxy)

client --> proxy --> RealSubject(开销大的对象)

12 模式的模式:复合模式 493

模式的模式

认识模型-视图-控制器

13 现实世界中的模式:更好地与设计模式相处 563

14 附录:剩下的模式 597

标签:Head,封装,读书笔记,对象,适配器,模式,实例,设计模式
From: https://www.cnblogs.com/liqinglucky/p/18414737/head-first

相关文章

  • 学习记录:设计模式
    设计模式(DesignPattern):        是前辈们对代码开发经验的总结,是解决特定问题的一系列套路。它不是语法规定,而是一套用来提高代码可复用性、可维护性、可读性、稳健性以及安全性的解决方案。设计模式的分类:常见的GOF种设计模式:        单例(Singleton)模式:......
  • 设计模式——工厂模式
    工厂模式1简单工厂模式1.1需求用例看一个披萨的项目:要便于披萨种类的扩展,要便于维护披萨的种类很多(比如GreekPizz、CheesePizz等)披萨的制作有prepare,bake,cut,box完成披萨店订购功能。1.2使用传统的方式来完成类图分析publicOrderPizza(){ Pizzapizza=......
  • 学习高校课程-软件设计模式-软件设计原则(lec2)
    FeatureofGoodDesign(1)优秀设计的特点(一)Codereuse代码复用–Challenge:tightcouplingbetweencomponents,dependenciesonconcreteclassesinsteadofinterfaces,hardcodedoperations–Solution:designpatterns–挑战:组件之间的紧密耦合、对具体类而不......
  • Java设计模式之命令模式介绍和案例示范
    一、命令模式简介命令模式(CommandPattern)是一种行为型设计模式,它将请求封装为一个对象,从而使你可以用不同的请求对客户端进行参数化、对请求排队或记录日志,以及支持可撤销的操作。命令模式的核心思想是将发出请求的对象与执行请求的对象分离,从而解耦请求的调用与处理逻辑......
  • 学习高校课程-软件设计模式-OOP 和 UML 类图 OOP 与 Java(lec1)
    Lecture1:OOPandUMLClassDiagramsOOPwithJavaOOP和UML类图OOP与JavaObject-OrientedProgramming面向对象编程ClassHierarchies类层次结构Superclassandsubclass超类和子类PillarsofObject-OrientedProgramming面向对象编程的支柱Abstraction–M......
  • 【转】Chrome 的无头模式升级了:推出 --headless=new
     Chrome的无头模式变得更好用了!本文概要介绍了近期的工程工作,让 Headless 更接近Chrome的常规“Headful”模式,让Headless对开发者更有用。背景早在2017年,Chrome59 便引入了所谓的无头模式,可让您在没有任何可见界面的无人值守环境中运行浏览器。从本质上讲,就是在不使用 ......
  • 《程序猿之设计模式实战 · 装饰者模式》
    ......
  • 学习高校课程-软件设计模式-简介(lec0)
    Lecture0IntroductiontotheCourseWhatareDesignPatternsTypicalsolutionstocommonlyoccurringproblemsinsoftwaredesign,likepre-madeblueprints.Creationalpatterns,structuralpatterns,andbehavioralpatterns软件设计中常见问题的典型解决方案,例如......
  • 设计模式-单例模式
    单例模式(SingletonPattern)是一种常用的软件设计模式,其目的是确保一个类仅有一个实例,并提供一个全局访问点来获取该实例。在Java中,实现单例模式有多种方式,但主要可以归纳为以下几种:1.懒汉式(线程不安全)这是最基本的实现方式,但是它在多线程环境下是不安全的。java复制代码publicc......
  • Qt C++设计模式->建造者模式
    建造者模式简介建造者模式(BuilderPattern)是一种创建型设计模式,它通过使用多个简单的对象一步步构建一个复杂对象。建造者模式允许你分步骤创建复杂对象,并且你可以控制每个步骤如何执行。该模式常用于对象的创建过程非常复杂且需要有多个可选参数的场景。建造者模式的应用场......