图解设计模式 小结

简洁,个人看;

适应设计模式

1、Iterator迭代器模式

在这里插入图片描述

  • iterator 两个方法: hasNext、next;
  • 实现这个接口。
  • 使用 iterator

2、Adapter适配器模式

  • 对现有的组件重复利用, (放在统一接口里 调用);
  • 对现有的类进行适配,生成新的类
  • 已有的 组件、类 都是经历 时间沉淀的,几乎没有问题的
  • 版本升级和 兼容

注意:功能完全不同的类,Adapter模式无法使用;
在这里插入图片描述

两种方式: 类适配(继承)、对象适配(委托)

在这里插入图片描述
在这里插入图片描述

  • print 提供 统一的 适配接口
  • PrintBanner 进行适配的 组装

交给子类

3、Template Method模式

(很多地方 都用到这 这个思想)
在父类中定义处理流程的框架,在子类中实现具体处理的模式。
在这里插入图片描述

4、Factory Method 工厂方法模式

父类决定实例的生成方式,但并不决定索要生成的具体的类,具体的处理全部交给子类负责。
生成实例的框架实际负责生成实例的类 解耦
在这里插入图片描述

  • create定义 实例生成方式, 调用了 createProduct 和 registerProduct
  • 实例Factory 继承自 Factory, 实现 createProduct 和 registerProduct方法;

生成实例

5、Singleton模式

Tips: 两点

  • 构造函数 private
  • getInstance, 对外提供接口 获取 唯一实例
public class Singleton {
    private static Singleton singleton = new Singleton();
    private Singleton(){
        System.out.println("生成了一个实例");
    }

    public static Singleton getInstance(){
        return singleton;
    }
}

6、Prototype(原型) 模式

利用 clone方法, 复制 存放已存在的 类; 一般用 map 存放

在这里插入图片描述
Manager 类

import java.util.HashMap;

public class Manager {
    private HashMap showcase = new HashMap();
    public void register(String name, Product proto){
        showcase.put(name,proto);
    }
    // 
    public Product create(String protoname){
        Product p = (Product)showcase.get(protoname);
        return p.crateClone();
    }
}

7、Builder 建造者模式

用于组装具有复杂结构的实例

在这里插入图片描述

在这里插入图片描述

  • 定义 Builder接口
  • 可以多个 实现 Builder接口
  • Director委托, 使用 Builder

8、Abstract Factory 抽象工厂模式

抽象工厂的工作是将“抽象零件” 组装成为“抽象产品”
我们并不关心零件的具体实现,而是只关心接口(API)。我们仅使用该接口(API)将零件组装成为产品。
在这里插入图片描述

  • 先 抽象 工厂
  • 可以实例化 多种 工厂
  • 零件 不好更改; 实例工厂好增加

9、Bridge桥接模式

希望新增功能:

  • 类的功能层次结构: 继承
  • 类的实现层次结构: 实现接口

把功能分开 更容易 扩展
在这里插入图片描述

10、Strategy策略模式

将 算法和 其他部分 分离开来;
程序运行中可以切换 策略;
易于 扩展 策略方法;
在这里插入图片描述

一致性

11、Composite 组合模式

能够使容器内容有一致性,创造出递归结构的模式。
比如: 目录和文件在这里插入图片描述

  • 内容 和 容器 都实现 同样的接口, 所以可以通过 里氏代换 对 接口进行操作;
  • 要注意 接口Entry 要和 容器的 api 尽量一致;

12、Decorator (装饰者)模式(有点模糊)

有点像 Composite模式
在不改变被装饰物的前提下增加功能:使用委托
注意: 父类 和 子类 的一致性处理
在这里插入图片描述

访问数据结构

13、Visitor(访问者)模式

  • Visitor模式中,数据结构与处理被分离开来。
  • 我们编写“访问者”的类来访问数据结构中的元素,并把对各元素的处理交给访问者类。
  • 这样,当需要增加新的处理时,我们只需要修改或编写新的访问者,然后让数据结构可以接受访问者的访问即可。

在这里插入图片描述
在这里插入图片描述

  • 观察者: 抽象一个 , 实例多个; 主要是 visit(element) 访问数据结构
  • element: 含有 accept 函数, 接收 visitor 来访问;

易于增加ConcreteVisitor角色
难以增加ConcreteElement角色

14、Chain Of Responsibility 责任链模式

类似于 链表: 当前节点解决不了, 移到下一个节点解决问题;
在这里插入图片描述
弱化了发出请求地人和处理请求的人之间的关系
可以动态地改变职责链
专注于自己的工作
推卸请求会导致处理延迟吗
确实如此。

15、Facade 外观模式

可以为互相关联在一起地错综复杂地类整理出高层接口(API),让系统对外只有一个简单的接口(API),并且考虑系统内部各个类之间地责任关系和依赖关系,按照正确地顺序调用各个类。
在这里插入图片描述
在这里插入图片描述
Facade 向外提供接口
向内:组织(调用)内部 类之间的关系,实现某功能;

16、Mediator 仲裁者模式

不让各个对象之间互相通信,而是增加一个仲裁者角色,让他们各自和仲裁者通信,然后将控制显示的逻辑处理交给仲裁者负责。
仲裁者成为 Mediator,各组员被称为Colleague。
在这里插入图片描述
在这里插入图片描述

管理状态

17、Observer 观察者模式

在这里插入图片描述

  • observer: 实现update(targetElement)方法

  • 被监听的:添加observer的管理: 增删改查、和 notifyObservers():调用 update方法;

  • 一方面,subject角色 不知道谁在监听自己,但实现了 update接口,就可以调用update接口

  • 另一方面,observer可以 通过统一的接口,调用getNumber()方法;

18、Memento备忘录模式

memento相当于 快照一样,保存当前状态的所有属性 的值;
简单的api 就是 保存 和 加载;
还可以扩展 对 mementos 的 管理;比如 过期时间等;
在这里插入图片描述

19、state 状态模式

用类来表示状态,我们可以通过切换类来方便的改变对象的状态;当需要增加新的状态时,如何修改代码这个问题也会很明确。

20、flyweight 享元模式

共享对象,避免浪费(轻量级,所使用的内存的大小)
当需要某个实例时,并不总是通过new关键字来生成实例,而是尽量共用已经存在的实例。
和单例结合;

21、Proxy代理模式

只在必要时生成实例
当代理人遇到无法自己解决色事情就会去找本人解决该问题。
在这里插入图片描述

  • 代理可以 含有 部分功能; 当 代理完成不了的时候, 请求 本人 来完成繁杂工作;
  • proxy和realsubject 之间要有一致性接口;
  • 大型系统 初始化非常漫长; 可以用 代理处理一些 简单工作;

用类来表现

22、Command模式

23、Interpreter模式

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值