1,策略模式

定义了算法族,分别封装起来,让他们之间可以互相替换,此模式让算法的变化独立于使用算法的客户。

oo基础:抽象,封装,多态,继承

oo原则:封装变化,多用组合,少用继承,针对接口编程,不针对实现编程

oo模式:策略模式。

2,观察者模式(Observer)

定义了对象之间的一对多依赖,这样一来,当一个对象改变状态时,他的所有依赖者都会收到通知并自动更新。

优点:松耦合

00基础:抽象

00原则:封装变化,多用组合,少用继承,针对接口编程,不针对实现编程,为交互对象之间的松耦合设计而努力,

00模式:观察者模式

3,装饰者模式

开放-关闭原则:类应该对扩展开放,对修改关闭。

装饰着和被装饰着对象有想通的超类型。

你可以用一个或者多个装饰着包装一个对象。

既然装饰着和被装饰对象有想通的超类型,所以在任何需要原始对象(被包装的)的场合,可以用装饰过的对象替代它。

装饰着可以在所委托被装饰着的行为之前与/或之后,加上自己的行为,以达到特定的目的。

对象可以在任何时候被装饰,所以可以在运行时态的,不限量的用你喜欢的装饰着来装饰对象。

装饰着模式:动态的将责任附加在对象上,若要扩展功能,装饰者提供了比继承更有弹性的替代方案。

继承是有了正确的类型,而不是继承它的行为,行为来自装饰者和基础组件,或与其他装饰者之间的组合关系。

例子:java的I/O流就是采用装饰者模式

00原则:封装变化,多用组合,少用继承,针对接口编程,不针对实现编程,为交互对象之间的松耦合设计而努力,对扩展开放,对修改关闭

4,工厂方法模式

定义了一个创建对象的接口,但由子类决定要实例化的类是哪一个,工厂方法让类把实例化推迟到子类。

简单工厂与工厂方法的区别:简单工厂把全部的事情,在一个方法都处理完了,然而工厂方法却是创建一个框架,让子类决定要如何实现。

优点:将创建对象的代码集中在一个对象或者方法中,可以避免代码中的重复,并且更方便以后的维护,这也意味着客户在实例化对象时,只会依赖于接口,而不是具体类,让代码更具有弹性。

依赖倒置原则:要依赖抽象,不要依赖具体类。

变量不可以持有具体类的引用。不要让类派生自具体类。不要覆盖基类中已实现的方法。

4.1,抽象工厂模式(不懂)

提供一个接口,用于创建相关或者依赖对象的家族,而不需要明确指定具体类。

工厂方法与抽象工厂区别:都是为了创建对象。工厂方法用的方法是继承,抽象用的是对象组合。工厂方法创建对象需要扩展一个类,并覆盖它的工厂方法。通过子类来创建对象。抽象工厂提供一个用来创建一个产品家族的抽象类型,这个类型的子类定义了产品被产生的方法,要想使用这个工厂必须先实例化它,然后将它传入一些针对抽象类型所写的代码中。

5,单件模式

确保一个类只有一个实例,并提供一个全局访问点。

多线程问题是那种解决方法:

(1)同步getInstance()方法

(2)使用急切创建实例

(3)双重检查加锁

6,命令模式

将“请求”封装成对象,以便使用不同的请求,队列或者日志来参数化其他对象,命令模式也支持可撤销的操作。

命令模式的用途:队列请求,日志请求,

7,适配器模式

将一个类的接口,转换成客户期望的另一个接口,适配器让原本接口不可兼容的类可以合作无间。

适配器分为两种:对象适配器(组合)和类适配器(继承)

7.1外观模式

提供了一个统一的接口,用来访问子系统中的一群接口,外观定义了一个高层接口,让子系统更容易使用(让接口更简单)。

外观模式并没有封装子系统,如有需要还是可以直接访问子系统的接口。

外观不只是简化了接口,也将客户从组件的子系统中解耦。

外观和适配器可以包装许多类,但是外观的意图是简化接口,而适配器的意图是将接口转换成不同接口

最少知识原则:只和你的密友谈话。

8,模板方法模式

在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中,模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤。

用途:排序,数组的排序就采用了模板方法模式,InputStream类的一个read()方法也是模板方法模式

9,迭代器模式

提供一种方法顺序访问一个聚合对象的各个元素,而又不暴露其内部的表示。

9.1组合模式(没懂)

允许你将对象组合成树形结构来表现“整体/部分”层次结构,组合能让客户以一直的方式处理个别对象以及对象组合。

10,状态模式

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

11,代理模式

为另一个对象提供一个替身或者占位符以控制对这个对象的访问。

使用代理模式创建代表对象,让代表对象控制某对象的访问,被代理的对象可以是远程的对象,创建开销大的对象或需要安全控制的对象。

11.1远程代理

远程代理可以作为另一个JVM上对象的本地代表,调用代理的方法,会被代理利用网络转发到远程执行,并且结果会通过网络返回给代理,再由代理将结果转给客户。(理解:就像驻场代表,传达客户与自己公司的意思。)

11.2 虚拟代理

虚拟代理作为创建开销大的对象的代表,虚拟代理经常直到我们真正需要一个对象的时候才创建它,当对象在创建钱和创建中时,由虚拟代理来扮演对象的替身,对象创建后,代理就会将请求直接委托给对象。

11.3动态代理

动态代理之所以称为动态,是因为运行时才将它的类创建出来,代码开始执行时,还没有proxy类,它是根据需要从你传入的接口集创建的。

InvocationHandler不是代理类,只是帮助proxy的类。

代理类有一个静态方法,叫做isProxyClass(),这个方法的返回值如果是true,就表示这是一个动态代理类。

11.4防火墙代理

控制网络资源的访问,保护主题免于“坏客户”的侵害。

11.5只能引用代理

当主题被引用时,进行额外的动作,例如计算一个对象呗引用次数。

11.6缓存代理

为开销大的运算结果提供暂时储存,它也允许多个客户共享结果,以减少计算或网络延迟。

11.7同步代理

在多线程的情况下为主题提供安全的访问。

11.8复杂隐藏代理

用来隐藏一个类的复杂几个的复杂度,并进行访问控制,

11.9写入时复制代理

用来控制对象的复制,方法是延迟对象的复制,知道客户真的需要为止。

12复合模式

复合模式结合两个或以上的模式,组成一个解决方案,解决一再发生的一般性问题。

MVC是复合模式,结合了观察者模式,策略模式和组合模式。

模型使用观察者模式,以便观察者更新,同事保持两者之间的解耦。

控制器是视图的策略,视图可以使用不用的控制器实现,得到不同的行为。

视图使用组合模式实现用户界面,用户界面通常组合了嵌套的组件,像面板,框架和按钮。

适配器模式用来将新模型适配成已有的视图和控制器。

13

模式是在某情景下,针对某问题的某种解决方案。

Head First 设计模式相关推荐

  1. 【Design pattern】设计模式思路总结(一)

    看了一周的设计模式,跟着小菜的思路走! 从简单工厂过渡策略,后面看的这几个模式都是在单一职责,开放--封闭原则,依赖倒转原则下不断的改进,采用模式写出的代码更容易扩展,维护! 比较容易懂. 装饰模式: ...

  2. GOF23设计模式(结构型模式)代理模式~

    代理模式应用场景十分广泛,随便一个框架都会用到,因此学好代理模式对后续框架学习是最基本的要素!!今天我们就来讲讲代理模式! 目录 1.简介 1. 核心作用 2. 角色分析 2. 应用场景 4. 分类 ...

  3. GOF23设计模式(创建型模式)工厂模式

    目录: 一:工厂模式的核心本质 二:关于面向对象的六大基本原则 三:工厂模式的三大类详解(代码示例,详细分析) 首先,上咱本GOF23所有工厂模式的分类表格!!! 创建型模式 单例模式.工厂模式.抽象 ...

  4. GOF23设计模式(创建型模式)单例模式

    目录: 一:单例模式的核心作用.常见应用场景 二:五种单例模式及其实现 三:关于反射和反序列化破解单例模式的漏洞,以及相应的解决方案 四:测试五种单例模式的效率 一:核心作用及常见应用场景: 核心作用 ...

  5. Python七大原则,24种设计模式

    七大设计原则: 1.单一职责原则[SINGLE RESPONSIBILITY PRINCIPLE]:一个类负责一项职责.  2.里氏替换原则[LISKOV SUBSTITUTION PRINCIPLE ...

  6. Java设计模式:单例模式

    学而时习,稳固而之心, 好久没有复习java的知识了,今天有空温习了单例模式,这里记录一下 单例模式是常见的设计模式的一种,其特点就是 指一个类只有一个实例,且该类能自行创建这个实例  , 保证一个类 ...

  7. 设计模式中的六大基本原则

    软件设计中的基本共识: 1,高内聚,低耦合:如果想使软件系统架构稳定,那么我们期望软件的各模块内元素结合的紧密,而模块之间的耦合度(关联性)越低越好.高内聚不仅体现在模块上,单独的类或方法也应该是内聚 ...

  8. JS中的7种设计模式

    第九章Refactoring to OOP Patterns 重构为OOP模式 7种设计模式: 1,模版方法模式(template method) 2,策略模式(strategy) 3,状态模式(st ...

  9. 设计模式之创建型汇总

    设计模式 创建型 工厂方法模式 定义:定义一个创建对象的接口,但让实现这个接口的类来决定实例化哪个类,工厂方法让类的实例化推迟到子类中进行 使用场景: 创建对象需要大量重复的代码 客户端(应用层)不依 ...

  10. [Python设计模式] 第21章 计划生育——单例模式

    github地址:https://github.com/cheesezh/python_design_patterns 单例模式 单例模式(Singleton Pattern)是一种常用的软件设计模式 ...

最新文章

  1. 重磅!6.7亿美元!F5喜提开源服务器Nginx
  2. flink scala shell命令行使用示例
  3. 程序员的10大编程技巧
  4. 解决“Maven项目中的Dynamic Web Module 3.0 requires Java 1.6 or newer”问题
  5. 哈老师一到的飞鸽传书
  6. Python subprocess命令行中文乱码
  7. PHP 实现定时任务的几种方法
  8. 为什么Python没有属性赋值的“with”语句?
  9. 需求分析的故事——如何练就需求分析的火眼金晴?
  10. 软件测试工程师,一个即将消失的职位?
  11. 扫地机器人石头爬坡_都这么强了,还要怎么升级:真实评测石头T6扫地机器人...
  12. Visual C# 2005 编译器选项
  13. java根据业务排序利用Comparator.comparing自定义排序规则
  14. 微信公众号获取关注页面链接
  15. java word导出表格_Java Word模板导出包含表格单元格合并
  16. CSS filter有哪些神奇用途
  17. 华大HC32F460芯片
  18. 【容易打工网】大学生职场励志箴言励志语录
  19. 新浪微博,腾讯微博mysql数据库主表猜想
  20. 51单片机学习1:C语言基础

热门文章

  1. 金万维异速联服务器重装,金万维异速联客户端常见错误提示及解决办法
  2. Mozilla Firefox安装Firepath Firebug找xpath最新可用的方法附老版本Firefox下载链接
  3. Android APP开发文档模板
  4. xcap发包工具的简单使用3(报文描述)
  5. 3Dmax软件安装问题解决方法
  6. Sql2Bean代码生成器
  7. java回调函数机制
  8. 落地SOA成为中国电信战略转型第一步
  9. 人脸识别常用数据集大全
  10. Android之反编译