《HeadFirts设计模式》笔记
定义
在某种情境下,针对某些问题的某种解决方案。
设计模式
1.可拓展性强,方便维护,能够应付变化。
何时使用设计模式
设计之前,还有在重构的时候。
OOP
可复用,可扩充,可维护
设计模式原则
1.封装变化。
找出可能需要变化的部分,独立出来。
2.面向接口编程。
这里的“接口”实际指的是“超类型”,比如接口,或者抽象类。
用接口声明,用具体的实现类实例化。
针对接口,通过多态,新类可以实现接口。通过接口编程,可以隔离掉以后系统可能发生的一堆变化。
3.多用组合,少用继承。
组合是has-a,而继承是is-a。
利用继承设计子类的行为,是在编译时静态决定的,而且所有的子类都会继承到相同的行为。因此,使用组合的做法拓展对象的行为,可以在运行时动态地拓展。
4.交互对象之间要松耦合。
5.类应该对拓展开放,对修改关闭。
继承
优点:代码复用。子类可以调用父类的方法及属性。
缺点:
1.利用继承设计子类的行为,是在编译时静态决定的。难以支持多种变化的行为(方法)。
2.子类不得不拥有父类的所有方法属性。所有子类都会继承到相同的行为。
3.如果对父类的方法做了修改的话(比如增加了一个参数),则子类的方法必须做出相应的修改。所以说子类与父类是一种高耦合,违背了面向对象思想。
图形:一般用三角形加上实线表示。
接口
优点:支持变化,有多种实现类。
缺点:代码无法复用。
图形:用三角形加上虚线表示
组合
组合:表示Has-A,有一个。可以通过构造器,setter注入对象。
图形:用箭头表示。
多态
设计模式分类
创建型、行为型、结构型。
行为型:涉及到类和对象如何交互及分配职责。
结构型:可以把类或对象组合到更大的结构中。
观察者模式
1.一个主题(SubSubject)对应多个观察者(Observer)。
2.主题可以添加观察者,也可以移除观察者。
3.java内置了观察者模式,有Observer接口和Observable类(被观察者,就是主题类),Observable类带有可以添加和移除观察者的方法。
4.观察者模式分为“推”和“拉”两种模式。
装饰器模式
1.可以动态地将功能附加到对象上。
2.装饰者和被装饰者具有相同的超类型。
3.装饰器模式举例:奶茶。有珍珠奶茶,椰果奶茶,抹茶,绿茶,还可以加冰,加热等等。可以用装饰器模式。
4.java.io中使用了大量的装饰器模式。
装饰者和被装饰者都继承了InInputStreStream。
装饰者:FilteInputStream是一个抽象装饰者,继承了InputStream。而其他装饰者继承FilterInputStream。
常见的被装饰者有FileInputStream,BytrArrayInputStream。
待补充
思考
继承也可以增强功能,为什么不用继承而使用装饰器模式?
解答:通过继承增强功能,需要写大量功能组合的类。比如功能A,B,C,D,就需要写AB,AC,AD,BC,ABC等等数不清的类。
疑问
1.委托是什么意思?
《HeadFirts设计模式》笔记的更多相关文章
- HTML+CSS笔记 CSS笔记集合
HTML+CSS笔记 表格,超链接,图片,表单 涉及内容:表格,超链接,图片,表单 HTML+CSS笔记 CSS入门 涉及内容:简介,优势,语法说明,代码注释,CSS样式位置,不同样式优先级,选择器, ...
- CSS笔记--选择器
CSS笔记--选择器 mate的使用 <meta charset="UTF-8"> <title>Document</title> <me ...
- HTML+CSS笔记 CSS中级 一些小技巧
水平居中 行内元素的水平居中 </a></li> <li><a href="#">2</a></li> &l ...
- HTML+CSS笔记 CSS中级 颜色&长度值
颜色值 在网页中的颜色设置是非常重要,有字体颜色(color).背景颜色(background-color).边框颜色(border)等,设置颜色的方法也有很多种: 1.英文命令颜色 语法: p{co ...
- HTML+CSS笔记 CSS中级 缩写入门
盒子模型代码简写 回忆盒模型时外边距(margin).内边距(padding)和边框(border)设置上下左右四个方向的边距是按照顺时针方向设置的:上右下左. 语法: margin:10px 15p ...
- HTML+CSS笔记 CSS进阶再续
CSS的布局模型 清楚了CSS 盒模型的基本概念. 盒模型类型, 我们就可以深入探讨网页布局的基本模型了.布局模型与盒模型一样都是 CSS 最基本. 最核心的概念. 但布局模型是建立在盒模型基础之上, ...
- HTML+CSS笔记 CSS进阶续集
元素分类 在CSS中,html中的标签元素大体被分为三种不同的类型:块状元素.内联元素(又叫行内元素)和内联块状元素. 常用的块状元素有: <div>.<p>.<h1&g ...
- HTML+CSS笔记 CSS进阶
文字排版 字体 我们可以使用css样式为网页中的文字设置字体.字号.颜色等样式属性. 语法: body{font-family:"宋体";} 这里注意不要设置不常用的字体,因为如果 ...
- HTML+CSS笔记 CSS入门续集
继承 CSS的某些样式是具有继承性的,那么什么是继承呢?继承是一种规则,它允许样式不仅应用于某个特定html标签元素,而且应用于其后代(标签). 语法: p{color:red;} <p> ...
- HTML+CSS笔记 CSS入门
简介: </span>年的圣诞节期间,吉多·范罗苏姆为了在阿姆斯特丹打发时间,决心开发一个新的<span>脚本解释程序</span>,作为ABC语言的一种继承. & ...
随机推荐
- Java设计模式原型模式
原型模式: – 通过new产生一个对象需要非常繁琐的数据准备或访问权限,则可以使用原型模式. – 就是java中的克隆技术,以某个对象为原型,复制出新的对象.显然,新的对象具备原型对象的特点 – 优势 ...
- java 动态代理 Proxy.newProxyInstance 使用心法
使用JDk的Proxy类的静态方法newProxyInstance ,让JVM自动生成一个新的类,类中包含了inerfaces参数中的所有方法,每个方法都调用h.invoke 方法 AOP ...
- C语言语法教程-结构体
2018-09-30 结构体中成员变量地址是连续的,结构体用于描述记录. Create a struct //---------------------------- //struct1.c //创建 ...
- Mark: 实现个toy版的脚手架(RPC)
p.s. 这些小toy的规模都在几百~上千行代码量,但足以反映一个tool的核心思想. 包括: 一些中间件(消息队列.Netty) Spring的IoC容器:(自动依赖注入) —— 就是利用Java ...
- [转] golang 字符串比较是否相等
1 前言 strings.EqualFold不区分大小写,"==" 区分且直观. 2 代码 golang字符串比较的三种常见方法 fmt.Println("go" ...
- 开发技术--pandas模块
开发|pandas模块 整了一篇关于pandas模块的使用文章,方便检查自己的学习质量.自从使用了pandas之后,真的是被它的功能所震撼~~~ 前言 目前所有的文章思想格式都是:知识+情感. 知识: ...
- electron项目中使用js web worker时,new worker(path)路径问题
如题,在new worker时需要传入js文件路径,可是在electron环境中使用出现问.同目录下,recorder.jsworker.js recorder.js中调用 var path = '. ...
- 金蝶BOS元模型分析
对一些需求变化多样的产品而言,做好可变性设计是非常重要的.国外做得好的有Siebel,国内有金蝶的BOS,实际上金蝶的BOS很多理念跟Siebel是相似的,呵呵...他们都是采用MDD的方式来解决可变 ...
- eclipse IDE 32位汉化方法及常用软件汉化包寻找办法
今天听说小组开发人员遇到安装eclipse不能汉化问题.了解到其他同事用的都是64位操作系统,这个同事用的32位系统.通常情况下常用软件都有各路大神发的成熟汉化包,不会出现无法安装汉化包的情况. 先找 ...
- CentOS6.7编译安装mysql5.6
可能因为有各种情况,无法通过yum安装mysql,这里记录一下编译安装的简单步骤 使用yum安装一些依赖 yum -y install make gcc-c++ cmake bison-devel ...