
设计模式
潇潇独行侠
我就是我,没水平的小伙儿
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
设计模式之单例模式
单例模式(Singleton) 定义: 保证一个类只有一个实例,并提供一个访问它的全局访问点。 特点: 只有一个实例,有懒汉式和饿汉式。 示例: 懒汉式 实例对象在首次被引用时,才实例化; /** * 单例模式测试类:懒汉模式 */ public class SingletonTest1 { private static SingletonTest1 test1; ...原创 2019-11-04 20:09:34 · 136 阅读 · 0 评论 -
设计模式之备忘录模式
备忘录模式(Memento) 定义: 在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保持这个状态。这样以后就可以将该对象恢复到原先保存的状态。 特点: 示例: import android.util.Log; /** * 原始数据: * */ public class Originator { //原始数据的某个状态,需要去备份 privat...原创 2019-11-01 20:56:31 · 184 阅读 · 0 评论 -
设计模式之适配器模式
适配器模式(Adapter) 定义: 将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。 特点: 示例: /** * 期望的接口 */ public interface Target { void request(); } /** * 被适配者:具有特殊的方法 * 实际想用的类 */ pub...原创 2019-11-01 16:13:40 · 155 阅读 · 0 评论 -
设计模式之状态模式
状态模式(State) 定义: 当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类。 特点: 主要解决的是当控制一个对象状态转换的条件表达式过于复杂时的情况。把状态的判断逻辑转移到表示不同状态的一系列类当中,可以把复杂的判断逻辑简化。就是为了消除庞大的条件分支语句。 在子状态的行为中,需要设置其下一状态 示例: /** * 抽象状态类:依赖Context ...原创 2019-11-01 13:57:42 · 157 阅读 · 0 评论 -
设计模式之策略模式
策略模式(Strategy) 定义: 它定义了算法家族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化,不会影响到使用算法的客户。 特点: 算法间经常互相替换。 示例: 个人思考: 感觉上类似简单工厂模式,可能工厂模式体现的是工厂创建对象,具体实例化的过程;而策略模式则重在对策略的抽象和抽离。 ...原创 2019-11-01 11:41:34 · 102 阅读 · 0 评论 -
设计模式之简单工厂模式、工厂方法模式对比
简单工厂模式 定义: 定义一个工厂类用来决定实例化哪个实例对象。 特点: 客户端和具体算法解耦,在扩展上只需要增加新的子类和添加工厂的判断逻辑即可,把改动和逻辑判断放到工厂类来完成。 示例: 计算器示例: 工厂方法模式(Factory Method) 定义: 定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。 特点: 产品和...原创 2019-10-31 21:35:25 · 233 阅读 · 0 评论 -
设计模式之单一职责原则
单一职责原则 定义: 就一个类而言,应该仅有一个引起它变化的原因。 特点: 就是根据此原则尽量去抽象、分离类的功能,做到低耦合。原创 2019-10-31 21:03:33 · 93 阅读 · 0 评论 -
设计模式之开放-封闭原则
开放-封闭原则 定义: 是说软件实体(类、模块、函数等等)应该可以扩展,但是不可修改。 特点: 1、对于扩展是开放的 2、对于更改是封闭的原创 2019-10-31 21:00:37 · 198 阅读 · 0 评论 -
设计模式之装饰模式
装饰模式(Decorator),亦可以理解为包装,就是一层层对原对象添加功能 定义: 动态地给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更为灵活。 特点: 装饰类(包装类)实现或继承原对象的接口或抽象类,又同时保持其引用;这样就可以设计很多装饰类的子类,每个子类就可以进行一次装饰或包装,就可以将原对象一层层地进行包装。 示例: 人形象装扮示例: 代码: /...原创 2019-10-31 20:53:51 · 97 阅读 · 0 评论 -
设计模式之代理模式
代理模式(Proxy) 定义: 为其他对象提供一种代理以控制对这个对象的访问。 特点: 第一种:远程代理,就是为一个对象在不同的地址空间提供局部代表。这样可以隐藏一个对象存在于不同地址空间的事实。 第二种:虚拟代理,是根据需要创建开销很大的对象。通过它来存放实例化需要很长时间的真是对象。(浏览器下载优化) 第三种:安全代理,用来控制真实对象访问时的权限。 第四种:智能指引,是指当调用...原创 2019-10-31 17:23:20 · 107 阅读 · 0 评论 -
设计模式之模板方法模式
模板方法模式(TemplateMethod) 定义: 定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。 特点: 模板方法模式就是提供了一个很好的代码复用平台;它通过把不变行为搬移到超类,去除子类中的重复代码来体现它的优势。 示例: 代码: /** * 模板方法抽象类 * 定义模板方法和子类需实现的...原创 2019-10-31 15:55:20 · 95 阅读 · 0 评论 -
设计模式之外观模式
外观模式(Facade),类比炒股和基金 定义: 为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。 特点: 设计一个facade类,来统一管理个子系统(可以理解为进一步封装,屏蔽),client端只需与facade交互即可。具体的操作由facade类与各子系统交互。 我们开发中可能会不经意的使用它,它完美地体现了依赖倒置原则和迪米特法...原创 2019-10-31 15:09:06 · 135 阅读 · 0 评论 -
设计模式之依赖倒置原则
依赖倒置原则也称依赖倒转原则,也就是要针对接口编程,不要对实现编程。这里的前提是里氏代换原则:子类型必须能够替换掉它们的父类型 定义: 1、高层模块不应该依赖低层模块;两个都应该依赖抽象。 2、抽象不应该依赖细节;细节应该依赖抽象。 特点: 就是高层依赖调用时不直接面向低层模块,而是依赖其抽象的接口或父类;这样在便于后续扩展和修改 示例: ...原创 2019-10-31 14:49:36 · 214 阅读 · 0 评论 -
设计模式之迪米特法则
迪米特法则 定义: 如果两个类不必彼此直接通信,那么这两个类就不应当发生直接的相互作用。如果其中一个类需要调用另一个类的某一个方法的话,可以通过第三者转发此调用。 特点: 其强调的前提是在类的结构设计上,每一个类都应当尽量降低成员的访问权限。 ...原创 2019-10-31 14:35:14 · 148 阅读 · 0 评论 -
设计模式之建造者模式
建造者模式 定义: 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示 特点: 某产品(Product)构建过程基本一致,细节有差异;我们抽象出一个接口或抽象类(Builder)来描述其构建的各个步骤项;通过一个类(Director)指挥者来组织步骤执行的顺序即构建流程;具体的细节差异由Builder的子类来实现 示例: 本例用造车来模拟此模型: /** ...原创 2019-10-31 11:29:39 · 140 阅读 · 0 评论 -
设计模式之观察者模式
设计模式中的观察者模式,又称发布-订阅模式(Publish-Subscribe); 定义: 它定义了一种一对多的依赖关系,让多个观察者对象同时监听某个主题对象。这个主题对象在状态发生变化时,会通知所有的观察者对象,使得观察者能够接收消息后及时自动更新状态。 特点: 在主题对象中使用一个ArrayList存放所有的观察者对象,当状态发生变化时,遍历List通知观察者更新。 示例: 以Ja...原创 2019-10-30 21:38:57 · 103 阅读 · 0 评论