设计模式笔记,看完Head First设计模式记录的笔记

目录

1.创建型设计模式:关注对象的创建,new的花样就有很多        5种

   1.1工厂方法模式

    1.2抽象工厂模式

   1.3单例模式

   1.4建造者模式

   1.5原型模式

2.结构型设计模式:关注类与类之间的关系,关系有很多种,"组合优于继承"      7种

2.1装饰器模式

2.2适配器模式

2.3外观模式

2.4组合模式

2.5代理模式

2.6桥接模式

2.7享元模式

3.行为型设计模式:关注对象的行为的关系(类与方法),就是方法到底该放到哪里      11种

 3.1策略模式

 3.2观察者模式

3.3访问者

3.4命令模式

3.5模板方法模式

3.6迭代器模式

3.7状态模式

3.8责任链模式

3.9解释器模式

3.10中介者模式

3.11备忘录模式


1.创建型设计模式:关注对象的创建,new的花样就有很多        5种

   1.1工厂方法模式

定义了一个创建对象的接口,但由子类决定要实例化的类是哪一个。工厂方法让类吧实例化推迟到子类。

   1.2抽象工厂模式

提供了一个接口,用于创建相关或依赖对象的家族,而不需要明确指定具体类。

   1.3单例模式

确保一个类只有一个实例,并提供一个全局访问点。

优点:有些对象其实只需要一个:比如线程池,缓存,对话框,

缺点:违反单一职责,因为它既负责创建自己又提供全局访问

   1.4建造者模式

封装一个产品的构造过程,并允许按步骤构造。

优点:

将一个复杂对象的创建过程封装起来

允许对象通过多个步骤的工厂模式不同

向客户隐藏产品内部的表现

产品的实现可以被替换,因为客户只看到一个抽象的接口

缺点:

经常被用在创建组合结构

与工厂模式相比,采用生成器模式创建对象的客户,需要具备更多的领域知识。

   1.5原型模式

当创建给定类的实例的过程很昂贵或很复杂时,就使用原型模式

优点:
        向客户隐藏制造新实例的复杂性。

提供让客户能够产生未知类型对象的选项

在某些环境下,复制对象比创建对象更有效。

缺点:

在一个复杂的类层次种,当系统必须从其中的许多类型创建新对象,可以考虑原型

对象复制有时相当复杂

2.结构型设计模式:关注类与类之间的关系,关系有很多种,"组合优于继承"      7种

2.1装饰器模式

动态的将责任附加到对象上。若要扩展功能,装饰器提供了比继承更有弹性的替代方案。

2.2适配器模式

将一个类的接口,转换成客户期望的另一个接口。适配器让原本接口不兼容的类可以合作无间。

2.3外观模式

提供了一个统一的接口,用来访问子系统中的一群接口。外观定义了一个高层接口,让子系统更容易使用。

2.4组合模式

允许你将对象组合成树形结构来表型“整体/部分”层次结构。组合能让客户以一致的方式处理个别对象以及对象组合。

2.5代理模式

为另一个对象提供一个替身或占位符以控制对这个对象的访问。

2.6桥接模式

使用桥接不只改变你的实现,也改变你的抽象

优点:

将实现予以解耦,让它和界面之间不再永久绑定

抽象和实现可以独立扩展,不会影响对方

对于“具体的抽象类”所作的改变,不会影响到客户

缺点:

适合使用在需要跨越多个平台的图形和窗口系统上

当需要用不同的方式改变接口和实现时,你会发现桥接模式很好用

桥接模式的缺点时增加了复杂度

2.7享元模式

如果想让某个类的一个实例能用来提供许多”虚拟实例“,就是用享元模式

优点:
           减少运行时对象实例的个数,节省内存。

将许多”虚拟“对象的状态集中管理

缺点:

当一个类有许多的实例,而这些实例能被同一个方法控制时,我们就可以使用享元模式

一旦你实现了它,那单个逻辑实例无法拥有独立而不同的行为。

3.行为型设计模式:关注对象的行为的关系(类与方法),就是方法到底该放到哪里      11种

 3.1策略模式

定义了算法族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化独立于使用算法的客户。

 3.2观察者模式

定义了对象之间的一对多依赖,这样一来,当一个对象改变状态时,他的所有依赖者都会收到通知并自动更新。

3.3访问者模式

当你想要为一个对象的组合增加新的能力,且封装并不重要时

优点:
        允许你对组合结构加入新的操作,而无需修改结构本身

想要加入新的操作,相对容易

访问者所进行的操作,其代码是集中在一起的

缺点:

当采用访问者模式的时候,就会打破组合类的封装

因为游走的功能牵涉其中,所以对组合结构的改变就更加困难

3.4命令模式

将“请求”封装成对象,以便使用不同的请求,队列或日志来参数化其他对象。命令模式也支持可撤销的操作。

3.5模板方法模式

在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤

LINQ的实现可以看作是一种特殊的模板方法,将大部分的代码写好,而将部分代码通过委托的形式交给客户端

3.6迭代器模式

提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露其内部的表示。

3.7状态模式

允许对象在内部状态改变时改变它的行为,对象看起来好像修改了它的类。

3.8责任链模式

当你想要让一个以上的对象有机会能够处理某个请求的时候,就使用责任链模式

优点:
将请求的发送者和接收者解耦

可以简化你的对象,因为它不需要知道链的结构。

通过改变链内的成员或调动它们的次序,允许你动态的新增或者删除责任

缺点:

经常用在窗口系统中,处理鼠标和键盘之类的事件。

并不保证请求一定会被执行,如果没有任何对象处理它的话,它可能会落到链尾端之外

可能不容易观察运行时的特征,有碍于除错。

3.9解释器模式

使用解释器模式为语言创建解释器。

优点:

将一个语法规则表示成一个类,方便于实现语言。

因为语法由许多类表示,所以你可以轻易地改变或扩展此语言

通过在类结构中加入新方法,可以在解释的同时增加新的行为,例如打印的美化或者进行复杂程序验证

缺点:

当你需要实现一个简单的语言时,使用解释器

当你有一个简单的语法,而且简单比效率更重要时,使用解释器。

可以处理脚本语言和编程语言

当语法规则的数目太大时,这个模式可能会变得非常繁杂,在这种情况下,使用解析器/编译器得产生器可能更合适。

3.10中介者模式

使用中介者模式来集中相关对象之间的复杂沟通和控制方式

优点:

通过将对象彼此解耦,可以增加对象的复用性

通过将控制逻辑集中,可以简化系统维护

可以让对象之间所传递的消息变得简单而大幅减少。

缺点:

中介者常常被用来协调相关的GUI组件

中介者模式如果设计不当,中介者对象本身会变得过于复杂

3.11备忘录模式

当你需要让对象返回之前的状态时,例如撤销

优点:

将被储存的状态放在外面,不要和关键对象混在一起,这可以帮助维护内聚

保持关键对象的数据封装

提供容易实现的恢复能力

缺点:

备忘录用于储存状态

使用备忘录的缺点:储存和恢复状态的过程可能相当耗时

在Java系统中,其实可以考虑使用序列化机制储存系统的状态

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值