图解 head first 设计模式
个人笔记,比较粗糙。详细内容请参考《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 设计模式相关推荐
- 图解Java多线程设计模式
图解Java多线程设计模式 1-4章 第一部分 第五章 生产者与消费者 第六章 读写锁 7.8.9章 第三部分 第十章 Two-phase Termination 想要结束运行中的线程 ,这张有问题, ...
- 图解Java多线程设计模式——Java多线程基础
文章目录 简介 线程的启动 线程启动(1)--利用Thread类的子类 线程启动(2)--利用Runnable接口 利用ThreadFactory新启动线程 线程的暂停 线程的互斥处理 synchro ...
- 图解多线程设计模式pdf_图解Java多线程设计模式阅读计划-图灵社区.PDF
图解Java多线程设计模式阅读计划-图灵社区 Java --1 Java Java 13 D API java.util.concurrent Java Java 3 321 20:00-22:00 ...
- 图解java多线程设计模式 pdf_图解Java设计模式之状态模式
图解Java设计模式之状态模式 APP抽象活动问题 状态模式基本介绍 状态模式的原理类图 状态模式解决APP抽奖问题 状态模式的注意事项和细节 APP抽象活动问题 请编写程序完成APP抽象活动,具体要 ...
- ULM图解 “23种设计模式”,及实例的类图
UML图解设计模式 23种设计模式分为三大类 创建型模式(5种) 工厂方法模式 抽象工厂模式 单例模式 建造者模式 原型模式 结构型模式(7种) 适配器模式 装饰模式 代理模式 外观模式 桥接模式 组 ...
- 图解23种设计模式,不信你学不会!(建议收藏)
点击关注公众号,实用技术文章及时了解 来源:blog.csdn.net/zsjlovesm521/article/details/94382666 一.单一职责原则 就一个类而言,应该仅有一个引起它变 ...
- 图解23种设计模式(TypeScript版)
使用思维导图来阐述23种设计模式,并以TypeScript实现其代码,让我们前端切图崽写出的代码具有可扩展性.可复用性.减少代码冗余问题,提升自身内功. 一.设计原则 二.创建型模式 创建型模式包含单 ...
- java的设计模式用的什么软件_《图解Java多线程设计模式》UML用什么软件画?
eclipse插件 AmaterasUML (下载地址:https://zh.osdn.net/projects/amateras/releases/#21568)解压放到plugins文件夹下 在安 ...
- java单例模式_Java描述设计模式(01):单例模式
本文源码:GitHub·点这里 || GitEE·点这里 一.单例模式 1.概念图解 单例设计模式定义:确保这个类只有一个实例,并且自动的实例化向系统提供这个对象. 2.样例代码 package Si ...
- 【设计模式】谈谈我们工作中的23个设计模式
ID 标题 地址 1 设计模式面试题(总结最全面的面试题) https://writer.blog.csdn.net/article/details/127910080 2 Java基础知识面试题(总 ...
最新文章
- 进程的介绍(概念、作用)
- [UIView beginAnimations:context:]与[UIView animateWithDuration:animations:]值得注意的一个区别...
- 山西五台警方通报“男子强拽女学生”:嫌疑人被刑拘
- 服务总线yali测试_满足吉利要求的车载总线测试服务
- 2016奥运男篮分组
- 重建二叉树(基于js)
- java光标位置无效_ResultSet.getString(1)引发java.sql.SQLException:当前光标位置的无效操作...
- 年薪35W+ 的程序员看过来!百万架构师第3期招生
- redisLock redis分布式锁
- 大数据之-Hadoop之HDFS的API操作_写数据流程_上传数据原理剖析_案例---大数据之hadoop工作笔记0066
- java面试准备之---Struts2体系知识点,系统复习,struts2原理,ognl,el支持.---随时更新
- Windows Server 2012 DHCP故障转移
- 蓝桥杯 传球游戏 动态规划
- n986原生android,【极光ROM】-【三星NOTE20高通全系列(国行/港版/台版/韩版/美版/日版) N98XX】-【V8.0 Android-R-UDC】...
- 玩转ansys——悬臂梁质量块的实体建模与仿真
- 篆刻学简体——第一章
- c开头英文语言,字母C开头的英文名
- 渗透利器BurpSuite简介
- Bootstrap排版之标题
- CNCERT发布《2018年我国互联网网络安全态势报告》