Java设计模式笔录(四)

参考文章:http://c.biancheng.net/view/1317.html

一、设计模式基础
类之间的关系

1、依赖关系 虚线箭头 类的方法体中 弱关联

2、关联关系 (has a)
1)单向关联 实线箭头 类的属性 强关联
2)双向管理 实线无箭头 类的属性 强关联
3)聚合 实线空心四边形 成员可以单独存在 类的属性 强关联
4)组合 实线实心四边形 成员不能单独存在 类的属性 强关联

3、泛化关系(is a) 实线空心箭头 继承 强耦合

4、实现关系 接口实现 虚线空心箭头

几个原则/职责/法则
  • 开闭原则: 软件实体应当对扩展开放,对修改关闭

  • 对开闭原则的补充有下面两个

    1、里氏替换原则: 继承必须确保超类所拥有的性质在子类中仍然成立
    2、依赖倒置原则: 高层模块不应该依赖低层模块,两者都应该依赖其抽象;
    抽象不应该依赖细节,细节应该依赖抽象

  • 单一职责 最简单但又最难运用的原则

  • 接口隔离原则 一个类对另一个类的依赖应该建立在最小的接口上

  • 迪米特法则 最少知识原则 没有直接关系则引入中间类

  • 合成复用原则 组合/聚合复用原则 先使用组合或者聚合等关联关系来实现,其次才考虑使用继承关系来实现

二、创建型模式
  • 单例模式

    1、懒汉
    2、饿汉

  • 原型模式 通过复制该原型对象来创建一个和原型相同或相似的新对象

    1、浅克隆 对象不同,属性除基础的外引用内存地址相同
    2、深克隆 都不同

  • 工厂方法模式 创建与使用相分离

    1、简单工厂(不属于GoF之一)
    2、抽象工厂
    3、产品簇抽象工厂
    4、建造者模式

三、结构性模式

类结构型模式和对象结构型模式 前者采用继承机制来组织接口和类,后者釆用组合或聚合来组合对象

  • 代理模式 对象结构型模式 静态代理 动态代理 srping aop原理

https://www.cnblogs.com/hadoop-dev/p/7095464.html

  • 适配器模式 将一个类的接口转换成客户希望的另外一个接口,使得原本由于接口不兼容而不能一起工作的那些类能一起工作。

    1、类适配器 继承
    2、对象适配器 引用持有
    3、双向适配器,实现两个

  • 桥接模式 将抽象与实现分离,使它们可以独立变化。它是用组合关系代替继承关系来实现

    1、抽象化角色包含实现化角色,可以扩展抽象化角色和多个具体实现化
    2、jdbc驱动程序、java虚拟机实现不同平台运行java
    3、与适配器模式联用:实现化角色与具体实现化适配

  • 装饰模式 在不改变现有对象结构的情况下,动态地给该对象增加一些职责

    1、抽象构件、具体构件、抽象装饰、具体装饰。 具体构件、抽象装饰实现抽象构件,包含于抽象装饰,实现在具体装饰
    2、Java I/O FileReader 增加缓冲区而采用的装饰类 BufferedReader
    3、可省略抽象构件(只有一个构件),可省略抽象装饰(只有一个装饰)

  • 享元模式 运用共享技术来有効地支持大量细粒度对象的复用

    1、抽象享元角色、具体享元角色、享元工厂角色、非享元角色
    2、内部状态、外部状态
    3、节省内存开销,把相同的部分统一
    4、String常量池、数据库连接池、缓冲池都是享元模式的应用

  • 组合模式 又叫作部分-整体模式,它是一种将对象组合成树状的层次结构的模式

    1、抽象构件、树叶构件、树枝构件
    2、透明式、安全式组合模式
    3、涉及层次树形结构、涉及部分整体结构

四、行为型模式
  • 策略模式 准备一组算法,并将这组算法封装到一系列的策略类里面

https://blog.csdn.net/youthon/article/details/7653389

1、抽象策略类、具体策略类、环境类
2、面向接口编程
3、Comparator接口排序
  • 模板方式模式 定义一个操作中的算法骨架,而将算法的一些步骤延迟到子类中,
    使得子类可以不改变该算法结构的情况下重定义该算法的某些特定步骤
    1、抽象类(模板方法,基本方式、钩子方法)、具体子类
    2、钩子方法用于判断不同子类的操作方式
    3、出国留学手续,不同国家不一样的实现子类

  • 命令模式 将一个请求封装为一个对象,使发出请求的责任和执行请求的责任分割开
    1、抽象命令类、具体命令角色、实现者/接受者、调用者/请求者
    2、命令模式与组合模式联合,构成宏命令模式
    3、适用场景广泛:点餐、遥控器、小爱同学

  • 责任链模式 为了避免请求发送者与多个请求处理者耦合在一起,将所有请求的处理
    者通过前一对象记住其下一个对象的引用而连成一条链;当有请求发生时,可将请
    求沿着这条链传递,直到有对象处理它为止。
    1、抽象处理者、具体处理者、客户类
    2、纯的职责链模式、不纯的职责链模式
    3、适用场景 请假审批、拦截器、Filter等

  • 状态模式 对有状态的对象,把复杂的“判断逻辑”提取到不同
    的状态对象中,允许状态对象在其内部状态发生改变时改变其行为
    1、环境类、抽象状态、具体状态
    2、当一个对象的行为取决于它的状态,并且它必须在运行时根据状态改变它的行为时,
    就可以考虑使用状态模式。
    3、学生成绩状态、多线程状态转换程序

  • 观察者模式 指多个对象间存在一对多的依赖关系,当一个对象的状态发生改变时,
    所有依赖于它的对象都得到通知并被自动更新
    1、抽象主题、具体主题、抽象观察者、具体观察者
    2、对象间存在一对多关系,一个对象的状态发生改变会影响其他对象
    3、又称作发布-订阅模式、模型-视图模式

  • 中介者模式 定义一个中介对象来封装一系列对象之间的交互,使原有对象之间的耦合松散,
    且可以独立地改变它们之间的交互
    1、抽象中介者、具体中介者、抽象同事类、具体同时类
    2、当对象之间存在复杂的网状结构关系而导致依赖关系混乱且难以复用时。
    3、迪米特法则(直接切换)的典型应用

  • 迭代器模式 提供一个对象来顺序访问聚合对象中的一系列数据,而不暴露聚合对象的内部表示。
    1、抽象聚合、具体聚合、抽象迭代器、具体迭代器
    2、不暴露聚合对象的内部结构的情况下,让外部代码透明地访问聚合的内部数据
    3、遍历、提供统一的接口

  • 访问者模式 将作用于某种数据结构中的各元素的操作分离出来封装成独立的类,使其在不改变
    数据结构的前提下可以添加作用于这些元素的新的操作,为数据结构中的每个元素提供多种访问方式。
    1、抽象访问者、具体访问者、抽象元素、具体元素、对象结构
    2、对象结构相对稳定,但其操作算法经常变化的程序;
    对象结构中的对象需要提供多种不同且不相关的操作,而且要避免让这些操作的变化影响对象的结构。
    对象结构包含很多类型的对象,希望对这些对象实施一些依赖于其具体类型的操作。
    3、与迭代器联用、与组合模式联用

  • 备忘录模式 在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,
    以便以后当需要时能将该对象恢复到原先保存的状态。该模式又叫快照模式
    1、发起人、备忘录、管理者
    2、实现了内部状态的封装,除了创建它的发起人之外,其他对象都不能够访问这些状态信息
    3、游戏存档、回滚机制

  • 解释器模式 给分析对象定义一个语言,并定义该语言的文法表示,再设计一个解析器来解释
    语言中的句子。
    1、抽象表达式、终结符表达式、非终结符表达式、环境、客户端
    2、实现了文法表达式处理的接口,该接口解释一个特定的上下文
    3、解释器模式在实际的软件开发中使用比较,在 Java 中可以用 Expression4J 或 Jep 等来设计

五、代码地址

https://github.com/suicuney/Java-GoF

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值