个人笔记,比较粗糙。详细内容请参考《head first 设计模式》

strategy

  • 基础:抽象、封装、多态、继承

  • 原则

    • 封装变化:找出会变化的方面,把它们从不变的部分分离出来。
    • 多用组合、少用继承
    • 针对接口编程,不针对实现编程
  • 定义:定义算法族,分别封装起来,让它们之间可以相互替换,此模式让算法的变化独立于使用算法的客户。

    • 封装可互换的行为,然后使用委托来决定要采用哪一个行为。
    • 使用对象组合。

public class MiniDuckSimulator1 {public static void main(String[] args) {Duck mallard = new MallardDuck();mallard.performQuack();mallard.performFly();Duck model = new ModelDuck();model.performFly();model.setFlyBehavior(new FlyRocketPowered());model.performFly();}
}

Observer

  • 原则

    • 为交互对象之间的松耦合设计二努力
  • 定义:在对象之间定义一对多的依赖,这样一来,当一个对象改变状态,依赖它的对象都会收到通知,并自动更新。

    • 当某个状态被改变时,允许一群对象能被通知到。
    • 利用继承设计子类的行为,是在编译时静态决定的,而且所有的子类都会继承到相同的行为。然而,如果能利用组合的做法扩展对象的行为,就可以在运行时动态地进行扩展。
  • 例子:新闻、订阅

public class WeatherStation {public static void main(String[] args) {WeatherData weatherData = new WeatherData();CurrentConditionsDisplay currentDisplay =new CurrentConditionsDisplay(weatherData);StatisticsDisplay statisticsDisplay = new StatisticsDisplay(weatherData);ForecastDisplay forecastDisplay = new ForecastDisplay(weatherData);weatherData.setMeasurements(80, 65, 30.4f);weatherData.setMeasurements(82, 70, 29.2f);weatherData.setMeasurements(78, 90, 29.2f);}
}

java提供的观察者模式

decorator

  • 原则

    • 对扩展开放,对修改关闭
  • 定义:动态地将责任附加到对象上。想要扩展功能,装饰者提供有别于继承的另一种选择。

  • 例子:I/O

factory

  • 原则

    • 依赖抽象,不要依赖具体类。
  • 定义:

    • 静态工厂方法:
    • 工厂方法:定义了一个创建对象的接口,但由子类决定要实例化的类是哪一个。工厂方法让类把实例化推迟到子类。(继承)
    • 抽象工厂方法:提供一本接口,用于创建相关或依赖对象的家族,而不需要置顶具体类。(组合)

    • 例子:实例化对象

静态工厂

工厂方法

public abstract class PizzaStore {abstract Pizza createPizza(String item);public Pizza orderPizza(String type) {Pizza pizza = createPizza(type);System.out.println("--- Making a " + pizza.getName() + " ---");pizza.prepare();pizza.bake();pizza.cut();pizza.box();return pizza;}
}

抽象工厂方法

singleton

public class Singleton {private static Singleton uniqueInstance;private Singleton() {}public static Singleton getInstance() {if (uniqueInstance == null) {uniqueInstance = new Singleton();}return uniqueInstance;}// other useful methods herepublic String getDescription() {return "I'm a classic Singleton!";}
}
  • 定义:确保一个类只有一个实例,并提供一个全局访问点

  • 例子:threadpool、cache、registry

command

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

    • 好处:将‘发出请求的对象’和‘接受与执行这些请求的对象’分割开来。
  • 例子:队列请求、日志请求、

public class RemoteControlTest {public static void main(String[] args) {SimpleRemoteControl remote = new SimpleRemoteControl();Light light = new Light();GarageDoor garageDoor = new GarageDoor();LightOnCommand lightOn = new LightOnCommand(light);GarageDoorOpenCommand garageOpen =new GarageDoorOpenCommand(garageDoor);remote.setCommand(lightOn);remote.buttonWasPressed();remote.setCommand(garageOpen);remote.buttonWasPressed();}
}

adapter

  • 定义:

    • 适配器(adapter-pattern):将一个类的接口,转换成客户期望的另一个接口。适配器让原来接口不兼容的类可以合作无间。对象适配器(组合);类适配器(多重继承)
    • 外观(facade-pattern):提供了一个统一的接口,用来访问子系统中的一群接口。外观定义了一个高层接口,让子系统更容易使用。

例子:迭代器
-

template

  • 原则:

    • 只和朋友交谈
    • 别找我,我会找你
  • 定义:在一个方法中定义一个算法的骨架,而将一些步骤推迟到子类中。模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤。

    • 使用继承
  • 例子:用模板方法排序(comparable接口-compareTo)

iterator

  • 原则:一个类应该只有一个引起变化的原因。
  • 定义:
    • 迭代器:提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露其内部的表示。
    • 组合:允许你将对象组成树形结构来表现“整体、部分”的层次结构。组合能让客户以一致的方式处理个别对象和对象组合。

state

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

proxy

  • 定义:为另一个对象提供一个替身或占位符来访问这个对象。

图解 head first 设计模式相关推荐

  1. 图解Java多线程设计模式

    图解Java多线程设计模式 1-4章 第一部分 第五章 生产者与消费者 第六章 读写锁 7.8.9章 第三部分 第十章 Two-phase Termination 想要结束运行中的线程 ,这张有问题, ...

  2. 图解Java多线程设计模式——Java多线程基础

    文章目录 简介 线程的启动 线程启动(1)--利用Thread类的子类 线程启动(2)--利用Runnable接口 利用ThreadFactory新启动线程 线程的暂停 线程的互斥处理 synchro ...

  3. 图解多线程设计模式pdf_图解Java多线程设计模式阅读计划-图灵社区.PDF

    图解Java多线程设计模式阅读计划-图灵社区 Java --1 Java Java 13 D API java.util.concurrent Java Java 3 321 20:00-22:00 ...

  4. 图解java多线程设计模式 pdf_图解Java设计模式之状态模式

    图解Java设计模式之状态模式 APP抽象活动问题 状态模式基本介绍 状态模式的原理类图 状态模式解决APP抽奖问题 状态模式的注意事项和细节 APP抽象活动问题 请编写程序完成APP抽象活动,具体要 ...

  5. ULM图解 “23种设计模式”,及实例的类图

    UML图解设计模式 23种设计模式分为三大类 创建型模式(5种) 工厂方法模式 抽象工厂模式 单例模式 建造者模式 原型模式 结构型模式(7种) 适配器模式 装饰模式 代理模式 外观模式 桥接模式 组 ...

  6. 图解23种设计模式,不信你学不会!(建议收藏)

    点击关注公众号,实用技术文章及时了解 来源:blog.csdn.net/zsjlovesm521/article/details/94382666 一.单一职责原则 就一个类而言,应该仅有一个引起它变 ...

  7. 图解23种设计模式(TypeScript版)

    使用思维导图来阐述23种设计模式,并以TypeScript实现其代码,让我们前端切图崽写出的代码具有可扩展性.可复用性.减少代码冗余问题,提升自身内功. 一.设计原则 二.创建型模式 创建型模式包含单 ...

  8. java的设计模式用的什么软件_《图解Java多线程设计模式》UML用什么软件画?

    eclipse插件 AmaterasUML (下载地址:https://zh.osdn.net/projects/amateras/releases/#21568)解压放到plugins文件夹下 在安 ...

  9. java单例模式_Java描述设计模式(01):单例模式

    本文源码:GitHub·点这里 || GitEE·点这里 一.单例模式 1.概念图解 单例设计模式定义:确保这个类只有一个实例,并且自动的实例化向系统提供这个对象. 2.样例代码 package Si ...

  10. 【设计模式】谈谈我们工作中的23个设计模式

    ID 标题 地址 1 设计模式面试题(总结最全面的面试题) https://writer.blog.csdn.net/article/details/127910080 2 Java基础知识面试题(总 ...

最新文章

  1. 进程的介绍(概念、作用)
  2. [UIView beginAnimations:context:]与[UIView animateWithDuration:animations:]值得注意的一个区别...
  3. 山西五台警方通报“男子强拽女学生”:嫌疑人被刑拘
  4. 服务总线yali测试_满足吉利要求的车载总线测试服务
  5. 2016奥运男篮分组
  6. 重建二叉树(基于js)
  7. java光标位置无效_ResultSet.getString(1)引发java.sql.SQLException:当前光标位置的无效操作...
  8. 年薪35W+ 的程序员看过来!百万架构师第3期招生
  9. redisLock redis分布式锁
  10. 大数据之-Hadoop之HDFS的API操作_写数据流程_上传数据原理剖析_案例---大数据之hadoop工作笔记0066
  11. java面试准备之---Struts2体系知识点,系统复习,struts2原理,ognl,el支持.---随时更新
  12. Windows Server 2012 DHCP故障转移
  13. 蓝桥杯 传球游戏 动态规划
  14. n986原生android,【极光ROM】-【三星NOTE20高通全系列(国行/港版/台版/韩版/美版/日版) N98XX】-【V8.0 Android-R-UDC】...
  15. 玩转ansys——悬臂梁质量块的实体建模与仿真
  16. 篆刻学简体——第一章
  17. c开头英文语言,字母C开头的英文名
  18. 渗透利器BurpSuite简介
  19. Bootstrap排版之标题
  20. CNCERT发布《2018年我国互联网网络安全态势报告》

热门文章

  1. 软件项目管理第4版课后习题[附解析]第一章
  2. Python如何清屏命令行终端
  3. Mysql成语数据库_成语文化文摘索引数据库
  4. 计算机的配置鼠标,电脑双鼠标怎么设置 电脑双鼠标设置方法
  5. C语言九九乘法表(五种输出形式)
  6. ibm服务器如何进入u盘装系统,加密u盘在电脑上怎么打开ibm服务器u盘装系统
  7. delphi2010转码Base64图片上传百度AI接口识别发票手记
  8. 万能打印之Delphi 2010实现(一)
  9. 【知识点总结】电机学——题目部分
  10. 我读《DOOM启世录》——成为一个真正厉害的人