随笔分类 - 设计模式
设计原则:
1、单一职责原则(Single Responsibility Principle);
2、开闭原则(Open Closed Principle);
3、里氏替换原则(Liskov Substitution Principle);
4、迪米特法则(Law of Demeter),又叫“最少知道法则”;
5、接口隔离原则(Interface Segregation Principle);
6、依赖倒置原则(Dependence Inversion Principle)。
摘要:设计模式(Design pattern)代表了最佳的实践,由众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。 基于:面向对象的设计原则 对接口编程而不是对实现编程。 优先使用对象组合而不是继承。 分类 1、创建型: 工厂模式(Factory Pattern)工厂模式 抽象工厂模式(Abs
阅读全文
摘要:支持回滚状态的一种模式。 核心: 创建一个拷贝对象进行备份。 给数据对象两个方法:1、进行备份。2、回滚。 需要备份的数据: public class Datas { private int id; private String name; private double salary; //进行备份
阅读全文
摘要:多个观察者关注同一个目标,当目标发生改变时,观察者们可以收到消息。 (立刻更新消息,或者想知道的时候更新消息。) 实现: 1、自定义观察者:观察者与目标有一致的状态属性,目标持有观察者的引用。 2、jdk自带的: java.util.Observable 类,实现它的类即可被观察(目标类)。 核心方
阅读全文
摘要:当类的行为是基于它的状态改变时,使用状态模式。比如红绿灯控制路口司机的行为。 应用: 用来解决系统中复杂对象的状态转换,以及不同状态下的行为封装问题。 结构: State抽象类。 State实现类:封装了一个状态对应的行为。 上下文类:它持有一个State对象,定义了当前的状态。 例子: 酒店有空闲
阅读全文
摘要:做一件事情,流程是固定的,其中存在不确定的同一类事务。 例如: 去店里吃饭:1、进入店铺。2、点单。3、吃饭。 不确定的是第二步:点单。 实现: 在父类中定义好统一的处理步骤(为不可重写的方法 final ),由子类实现不同的步骤后,调用统一的处理步骤。一般可以使用匿名内部类简化。 比如我从睡醒到出
阅读全文
摘要:当处理同一个对象有多个处理算法的时候,使用一个策略对象来选择处理算法。 例子: 对于客户的优惠率。 算法实现统一的接口: public interface Strategy { public double getPrice(double standarPrice);//获取计算价格的算法 } 具体算
阅读全文
摘要:表示一个作用于某对象结构中的各个元素的操作,使我们在不改变元素的类的前提下定义作用于这些元素的新操作。 使用场景: 对象结构比较稳定,但经常需要在此对象结构上定义新的操作。 需要对一个对象结构中的对象进行很多不同的并且不相关的操作,而需要避免这些操作“污染”这些对象的类,也不希望在增加新操作时修改这
阅读全文
摘要:自定义解析器。 需要:构建语法树,定义终结符与非终结符。 例子:Jsp代码,底层编译为Servlet类。 替代方案:Java中使用脚本引擎运行脚本语言
阅读全文
摘要:将一个请求封装为一个对象,使发出请求的责任和执行请求的责任分割开。 这样两者之间通过命令对象进行沟通,这样方便将命令对象进行储存、传递、调用、增加与管理。 结构: Clinet 客户端:下发命令的类,持有Command 命令类。 大哥说:我渴了。 Command 命令类:管理命令的类,持有Recei
阅读全文
摘要:用来降低多个对象和类之间的通信复杂性。这种模式提供了一个中介类,该类通常处理不同类之间的通信,并支持松耦合,使代码易于维护。 场景: 公司多个部门之间,若直接互相打交道,则会形成网状结构,及其复杂,通过经理(中介者)来进行通信则会大大提供效率。 实现思路: 多个对象持有中介者的引用,中介者中持有多个
阅读全文
摘要:用来遍历集合的工具。 实现方式: 使用一个游标记录当前读取位置。 容器中使用迭代器: 一般迭代器都有的方法,整个接口: public interface MyInterator { void first();//将游标指向第一个元素 Object next();//获取此元素并且将游标指向下一个元素
阅读全文
摘要:一个请求有多个对象可以处理,但每个对象的处理条件或权限不同。 定义: 为了避免请求发送者与多个请求处理者耦合在一起(使用 if 选择语句处理请求),将所有请求的处理者通过前一对象记住其下一个对象的引用(链表)而连成一条链;当有请求发生时,可将请求沿着这条链传递,直到有对象处理它为止。 结构: 请求对
阅读全文
摘要:共享对象! 目的: 减少创建对象的数量,以减少内存占用和提高性能。 核心奥义: 通过享元类工厂来控制类的生成,相同的对象被放在Map中。 享元对象的结构: 内部状态:可以共享。一般为不可变的属性。 外部状态:不可以共享。一般为可变的属性。 例子 享元类接口:包含了享元类要实现的方法。 interfa
阅读全文
摘要:就是封装!就是封装!就是封装! 把一个很复杂的过程,包装成一个方法。 调用的时候,只使用了一条语句,非常简介!非常美观! 比如:创建一个对象,只需要: new 类名(); 它的内部实现过程自有人帮你做。 迪米特法则(Law of Demeter)又叫作最少知识原则(The Least Knowled
阅读全文
摘要:给某个对象,动态新增功能。 构成: 1、抽象接口:真实对象与装饰对象实现同一个接口。 2、装饰父类:持有一个真实对象的引用,即可为真实对象新增功能。 3、真实对象:被扩展的对象。 4、装饰对象:继承装饰父类,负责添加功能的装饰对象。 比如: 我有一个IO输出流,它只能写入字节数据。真实对象:File
阅读全文
摘要:把部分和整体的关系用树形结构来表示,使客户端可以使用统一的方式处理部分对象(比如具体文件)和整体对象(比如一个文件夹)。 构成: Component 抽象角色:定义了叶子和容器结构的共同方法 Leaf 叶子角色:无子节点。 Composite 容器角色:可以包含字节点。 比如: 我要对一个文件进行查
阅读全文
摘要:一个类中有两个可以扩展的组件,需要扩展的时候会很麻烦,通过桥接接口,把其中一个组件独立出去。 应用场景: 一个类存在两个独立变化的维度,且这两个维度都需要进行扩展。 如果一个系统需要在构件的抽象化角色和具体化角色之间增加更多的灵活性,避免在两个层次之间建立静态的继承联系,通过桥接模式可以使它们在抽象
阅读全文
摘要:代理模式指的是:为某个对象提供一个代理对象,并且由代理对象控制对原对象的访问。 使用场景: 1、安全代理:屏蔽对真实角色的直接访问。 2、远程代理:通过代理类处理远程方法调用(RMI)。 3、延迟加载:先加载轻量级的代理对象,真正需要再加载真实对象。 分类: 1、静态代理:静态定义代理类。 例子:静
阅读全文
摘要:适配器模式:我的电脑只有Type-c接口,要使用usb设备,那就需要适配器来进行转接。 构成: 目标接口(Target):用户所期待的接口,抽象类、或者是具体的类,比如电脑上的type-c接口。 需要适配的类(Adaptee):需要适配器转接后才能使用的类,比如usb设备。 适配器(Adapter)
阅读全文
摘要:当我需要创建多个相同的对象时,若通过new 创建对象比较费时费力,那么可以通过克隆来创建一个一样的新对象,即通过原型创建新对象。 原型模式大大节省资源测试 克隆方式: 实现Cloneable接口(声明接口:声明此方法可以克隆),重写Object类的clone方法。 浅克隆:被Clone的对象的所有变
阅读全文