定义

在某种情境下,针对某些问题的某种解决方案。

设计模式

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设计模式》笔记的更多相关文章

  1. HTML+CSS笔记 CSS笔记集合

    HTML+CSS笔记 表格,超链接,图片,表单 涉及内容:表格,超链接,图片,表单 HTML+CSS笔记 CSS入门 涉及内容:简介,优势,语法说明,代码注释,CSS样式位置,不同样式优先级,选择器, ...

  2. CSS笔记--选择器

    CSS笔记--选择器 mate的使用 <meta charset="UTF-8"> <title>Document</title> <me ...

  3. HTML+CSS笔记 CSS中级 一些小技巧

    水平居中 行内元素的水平居中 </a></li> <li><a href="#">2</a></li> &l ...

  4. HTML+CSS笔记 CSS中级 颜色&长度值

    颜色值 在网页中的颜色设置是非常重要,有字体颜色(color).背景颜色(background-color).边框颜色(border)等,设置颜色的方法也有很多种: 1.英文命令颜色 语法: p{co ...

  5. HTML+CSS笔记 CSS中级 缩写入门

    盒子模型代码简写 回忆盒模型时外边距(margin).内边距(padding)和边框(border)设置上下左右四个方向的边距是按照顺时针方向设置的:上右下左. 语法: margin:10px 15p ...

  6. HTML+CSS笔记 CSS进阶再续

    CSS的布局模型 清楚了CSS 盒模型的基本概念. 盒模型类型, 我们就可以深入探讨网页布局的基本模型了.布局模型与盒模型一样都是 CSS 最基本. 最核心的概念. 但布局模型是建立在盒模型基础之上, ...

  7. HTML+CSS笔记 CSS进阶续集

    元素分类 在CSS中,html中的标签元素大体被分为三种不同的类型:块状元素.内联元素(又叫行内元素)和内联块状元素. 常用的块状元素有: <div>.<p>.<h1&g ...

  8. HTML+CSS笔记 CSS进阶

    文字排版 字体 我们可以使用css样式为网页中的文字设置字体.字号.颜色等样式属性. 语法: body{font-family:"宋体";} 这里注意不要设置不常用的字体,因为如果 ...

  9. HTML+CSS笔记 CSS入门续集

    继承 CSS的某些样式是具有继承性的,那么什么是继承呢?继承是一种规则,它允许样式不仅应用于某个特定html标签元素,而且应用于其后代(标签). 语法: p{color:red;} <p> ...

  10. HTML+CSS笔记 CSS入门

    简介: </span>年的圣诞节期间,吉多·范罗苏姆为了在阿姆斯特丹打发时间,决心开发一个新的<span>脚本解释程序</span>,作为ABC语言的一种继承. & ...

随机推荐

  1. pod的yaml说明

    apiVersion: v1 #指定api版本,此值必须在kubectl apiversion中 kind: Pod #指定创建资源的角色/类型 metadata: #资源的元数据/属性 name: ...

  2. Java 8——保存参数名称

    一.详述 在很多情况下,程序需要保存方法参数名称,如Mybatis中的mapper和xml中sql的参数绑定.但是在java 8之前的编译器是不支持保存方法参数名至class文件中的. 所以很多框架都 ...

  3. FrameworkCubeMX.gpdsc missing的问题

    (1)上图红框内容均不要勾选 (2)工程中自己添加相应的启动文件,形如: startup_stm32f030x6.s system_stm32f0xx.c

  4. .net core (领域事件,并发 for update) 工作内容记录

    这周工作,因为要对几个不同的表进行货币增加,锁定,所以 用了领域事件和并发 for update  ,先记录一下 领域事件 ,Dapper 事务 ,sql for update 这几个点 头大,最近工 ...

  5. redis 缓存问题汇总

    前言:在使用redis的时候,特别是大型应用,会碰到不少问题,下面就来总结一下使用redis时的常见问题 一.redis为缓存的问题 1.缓存和数据库双写一致性问题 分析:一致性问题是分布式常见问题, ...

  6. 我是如何一步步编码完成万仓网ERP系统的(十)产品库设计 6.属性项和类别关联

    https://www.cnblogs.com/smh188/p/11533668.html(我是如何一步步编码完成万仓网ERP系统的(一)系统架构) https://www.cnblogs.com/ ...

  7. Python基础14

    P73. 内嵌函数的讲解介绍 内部函数,书中讲的应用较简单,后面找篇具体的文章学习下

  8. Vue-Cli 3.x 创建的项目中对 import 引入的 CSS 样式启用 autoprefixer

    问题描述: Vue-Cli 3.x 默认开启了 autoprefixer,但对于在 main.js 中通过 import 引入的 CSS 并没有自动添加前缀 分析原因: autoprefixer 在项 ...

  9. 【数据库】数据库入门(四): SQL查询 - SELETE的进阶使用

    集合操作常用的集合操作主要有三种:UNION(联合集).INTERSECT(交叉集).EXCEPT(求差集).以上三种集合的操作都是直接作用在两个或者多个 SQL 查询语句之间,将所有的元组按照特定的 ...

  10. Linux搭建邮件服务器Postfix+Dovecot+MySQL+PHP

    用于搭建的服务器信息 阿里云 Centos 6.5 32位 安装过程1.安装Postfix 版本(2:2.6.6-8.el6) yum -y install postfix 安装完成还需要替换系统自带 ...