前言
本次博文对何昊出版的《java程序员面试宝典》的第7章设计模式部分的概括笔记,删除其中部分代码,试题和一部分相对简单的内容题目。
相关题目
推荐一个我当初本科时候总结的设计模式文档(包含了13种设计模式的一些详解),有需要可下载。设计模式文档
23种设计模式
创建型 | 结构型 | 行为型 | |
---|---|---|---|
类 | 工厂方法 | 适配器类 | 解释型 模板方法 |
对象 | 抽象工厂 生存器 原型 单例 |
适配器对象 桥接 组合 装饰 外观 享元 代理 |
职责链 命令 迭代器 中介者 备忘录 观察者 状态 策略 访问者模式 |
单例模式
单例模式作用保证整个程序生命周期中任何时刻只存在一个单例类实例(也可不在)。
类变量instance持有唯一单例,类方法getInstance获取唯一实例。
全局变量和单例模式区别
全局是对一个对象的静态引用,全局确实可以提供单例模式实现的全局访问功能,但不能保证程序中只有一个实例。编码规范指出少用全局变量,过多导致代码难读。最后全局变量不能实现继承。
单例类的构造函数必须是私有,必须提供全局访问点。
工厂模式
工厂模式动态决定哪一个类实例化,不必实现自动每次要实例化哪一个类。
简单工厂模式
提供参数,返回几个可能产品中的一个类实例(构造器传入)
工厂方法模式
定义一个用于创建产品对象的工厂的接口,实际创建工作由工厂接口子类完成。
抽象工厂模式
多个抽象角色使用的工厂模式,抽象工厂向客户端提供接口,客户端不指定具体产品情况下,创建多个产品族中的产品对象。根据LSP(里氏替换原则),任何接受父类地方都应当接受子类。系统所需仅是类型与这些抽象产品角色相同的一些实例而非这些抽象产品的实例。换句话说是这些抽象产品的具体子类的实例,工程类负责创建抽象产品的具体子类实例。
适配器模式
又称变压器模式,把一个类的接口转换成客户端所期望的另一种接口,使得原本因为接口不匹配而无法一起工作的两个类能一起工作。
适配器类可以根据传入的参数返还合适实例给客户端。
适配器应用于“望复用一些现存类,但接口又与复用环境不一致”。
适配器模式有对象适配器和类适配器。类适配器采用多继承实现,引起程序紧耦合。对象适配器采用对象组合,耦合度低。
观察者模式
发布/订阅模式,提供避免组件紧密耦合的一种方法。将观察者和被观察的对象分离开来。该模式中,对象通过添加一个方法(允许另一个对象,即观察者注册自己)使本身变得可观察。当可观察对象更改时,会将消息发送给已注册的观察者。这些观察者使用该信息执行的操作与可观察对象无关,结果是对象可以互相对话,而不必了解原因。
观察者模式在模块之间划定明确界限,提高程序可维护性和重用性。
结语
本次博文对何昊出版的《java程序员面试宝典》的第7章设计模式部分的概括笔记,希望对他人和以后自己有帮助。