随笔分类 - 设计模式
摘要:前言 这次用了一个月多点的时间再次温习设计模式,利用下班后的时间回来学习,把学习心得记录下来,加深了对面向对象的理解 之前是看到一个需求搞清楚业务流程之后立刻就去做了,很少从设计层面的角度考虑,现在在开发程序时,开始有了设计的思想,也有了达到可维护,可复用,可扩展目的具体的实现方法 每当看到经过优化
阅读全文
摘要:单一职责原则 定义: 如果你能想到多余一个的动机去改变一个类,那么这个类就具有对于一个的职责,就应该考虑类的职责分离 职责过多的坏处 如果一个类承担的职责过多,就等于把这些职责耦合在一起,一个职责的变化可能会削弱或抑制这个类完成其它职责的变化,这些耦合会导致脆弱的设计,当发生变化时,设计会遭受意想不
阅读全文
摘要:定义 访问者模式定义: 把数据结构, 和作用于数据结构上的操作,分离 模式结构 代码实现 场景: 男人和女人谈恋爱,男人的状态和女人的状态 代码实现:点击下载 特点和使用场景 优点:很容易增加新的操作 缺点: 使增加新的数据结构变得困难 使用场景: 数据结构相对稳定的系统
阅读全文
摘要:定义 解释器模式定义: 你对一个机器人说"哥们,向前走",它能听懂并按照你的话去执,这里运用了解释器模式,把你的一句话,转成实际的命令程序执行 模式结构 代码实现 场景:a+b 场景分析: a,b 对应终结符表达式, +对应非终结符表达式 代码实现:点击下载 特点和使用场景 特点: 容易改变还扩展文
阅读全文
摘要:定义 享元模式定义: 内部状态和外部状态: 比如: 模式结构 代码实现 场景: 博客园是一个大型的网站,每个人的博客是一个小型的网站,根据用户的id,展示的内容不一样, 因此数据和模板不同,但代码核心和数据库是共享的 代码: 点击下载 特点和使用场景 优点: 避免大量相似类的开销 使用场景: 程序中
阅读全文
摘要:定义 解决: 对象之间相互链接,关系复杂, 一个对象不可能在没有其他对象的支持下工作,系统变现为不可分割的一个整体,但类与类之间不必直接通信的问题 比如: 两个国家的摩擦,通过联合国协商, 联合国就是中介者 模式结构 代码实现 场景:美国和伊拉克通过联合国协商核武器问题 代码实现:点击下载 特点和使
阅读全文
摘要:定义 责任链模式定义: 比如: 员工小张向组长申请加薪, 组长没这个权利并将请求告诉部长,部长同意了小张的加薪请求 模式结构 代码实现 场景: 经理可以批准请假, 经理的上级是总监, 总监可以批准加薪 代码实现:点击下载 优点 1.客户端不知道哪一个对象最终处理请求,在不影响客户端的情况下可以动态的
阅读全文
摘要:定义 命令模式定义: 比如: 吃烤串时, 客人点烤羊肉,烤鸡肉, 服务员记录下客人的点餐记录,然后通知厨师开始做 命令模式将功能(请求)封装成对象 目的 对命令请求者(Invoker)和命令实现者(Receiver)的解耦,方便对命令进行各种控制。 模式结构 代码实现 场景: 去饭店吃烤串 代码:
阅读全文
摘要:定义 桥接模式定义: 系统有多角度分类,每一种分类都有可能变化,那么就把这种多角度分离出来,让它们独立变化,每种变化不会影响其它实现 每个维度提取出抽象和它的实现, 即“子类化”它们,得到各个子类之后,便可以任意它们变化 比如: 模式结构 代码实现 场景: 手机M品牌,手机N品牌, 它们都要游戏功能
阅读全文
摘要:定义 单例模式定义: 若显式的定义构造方法,则系统默认的构造方法就会失效,让类自身负责保存它的一个实例,这个类可以保证没有其他实例被创建 模式结构图 getInstance: 静态方法,创建唯一的实例, 允许客户端访问它的唯一实例 代码实现 场景:多线程+ 双重锁定 点击下载代码 懒汉式 特点和使用
阅读全文
摘要:定义 迭代器模式定义: 也就是说必须要有 第一个开始,下一个是谁,是否结束,当前哪一项 例如: 售票员一个一个的询问乘客是否买票 模式结构 Iterator:迭代抽象类,定义得到开始对象,下一个对象,判断是否到结尾,当前对象等抽象方法 Aggregate:抽象聚焦类 代码实现 场景:获取List集合
阅读全文
摘要:定义 组合模式定义: 部分与整体被一致对待 例如:笔记本电脑, 可以复制一个文件,也可以复制一个文件夹 模式结构 Component: 组合中的对象声明接口,声明所有类的默认行为,用以访问和管理子部件 Leaf: 表示叶节点对象,叶节点没有子节点 Composite: 表示子节点对象, 用来操作子部
阅读全文
摘要:定义 备忘录模式定义: 生活是现场直播,时光不能倒流,但是在软件设计中, 使用备忘录模式,相当于有了后悔药 例如: 在看电子书时,保存的书签 模式结构 Originnator(发起人):负责创建备忘录.用以保存其状态 Mementor(备忘录):负责保存 Originnator的内部状态 Caret
阅读全文
摘要:定义 适配器模式定义: 需要的东西就在眼前,但却不能使用,短时间内无非改造,于是我们就想办法适配它 例如: 一些国家的电压是不同的, 但是笔记本电脑通过电源适配器,都能把电源变成需要的电压 模式结构 Target: 客户期待的接口,可以是抽象类或者接口 Adapter: 在内部包装一个Adeptee
阅读全文
摘要:定义 状态模式定义: 消除庞大的条件分支,将特定状态的行为放入一个对象中 生活中:开灯和关灯是两个状态 模式结构 Context: 上下文环境,维护一个状态实例,定义当前的状态 State: 抽象状态类,定义一个接口,封装与Context的一个特定状态相关的行为 ConcreteState:具体状态
阅读全文
摘要:定义 抽象工厂模式定义: 抽象工厂模式通常是用于创建一族产品,并且这族产品分不同的等级;不同的具体工厂类生产不同等级的一族产品 比如下图(来源于网络) 两厢车和三厢车称为两个不同的等级结构;2.0排量两厢车和2.0排量三厢车成为同一个产品族。 与工厂方法模式的区别 工厂的产品全部属于同一个等级结构,
阅读全文
摘要:定义 观察者模式定义: 将一个系统分割成一系列相互协作的类, 需要维护相关对象间的一致性, 为了维持一致性而使各类紧密耦合,这样会给维护,扩展和重用都带来不便 生活中例子: 模式结构图: Subject: 抽象通知者, 把所有观察者对象的引用保存在一个聚焦里,定义增加,删除和通知方法 Observe
阅读全文
摘要:定义 建造者模式定义: 既保证流程不变, 每个流程实现的具体细节可以变化, 比如:建造楼房, 先打桩,在搭架子.... 在程序中对应的是: 抽离出对象的组成部分以及他们的装配方式 模式机构 Build: 抽象类,创建Product对象的各个部件指定的抽象接口 ConcreteBuild: 具体建造者
阅读全文
摘要:外观模式的用意是为子系统提供一个集中化和简化的沟通渠道,而不是向子系统加入新的行为 生活中的例子: 定义 定义: 为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这一接口使得这一子系统更加容易使用 结构图 Facade: 是模式的核心,指导所有子系统的功能, 可根据客户端的需求定制
阅读全文
摘要:有时候,我们会遇到由一系列步骤构成的过程,这个过程从高层次上看是相同的,但有些步骤的实现可能不同,我们就要考虑使用模板方法 生活中的例子:坐交通工具上班, A开车,B做公交, 交通工具就是一个抽象模板 定义 定义一个操作中的算法的骨架,而将一些步骤延迟到子类中,模板方法使得子类不改变算法的结构,即可
阅读全文