设计模式

整理了一下23种设计模式;

资源在我的主页下载里面有,不知道怎么设置不需要金币下载

 

一、创建型模式 : 创建型模式抽象了实力化过程.帮助一个系统独立于如何创建、组合和表示它的哪些对象

1. 单例(Singleton)

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

2. 简单工厂(Simple Factory)

在创建一个对象时不向客户暴露内部细节,并提供一个创建对象的通用接口。

3. 工厂方法(Factory Method)

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

4. 抽象工厂(Abstract Factory)

提供一个接口,用于创建 相关的对象家族 。

5. 生成器(Builder)

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

6. 原型模式(Prototype)

使用原型实例指定要创建对象的类型,通过复制这个原型来创建新对象。

二、结构型模式 : 结构型模式涉及到如何组合类和对象以获得更大的结构.结构型类模式采用继承机制来组合接口或实现,一个简单的例子就是采用多重继承方法将两个以上的类组合成一个类,结果这个类包含了所有父类的性质.

1. 责任链(Chain Of Responsibility)

使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链发送该请求,直到有一个对象处理它为止。

2. 命令(Command)

将命令封装成对象中,具有以下作用:

  • 使用命令来参数化其它对象
  • 将命令放入队列中进行排队
  • 将命令的操作记录到日志中
  • 支持可撤销的操作

3. 解释器(Interpreter)

为语言创建解释器,通常由语言的语法和语法分析来定义。

4. 迭代器(Iterator)

提供一种顺序访问聚合对象元素的方法,并且不暴露聚合对象的内部表示。

5. 中介者(Mediator)

集中相关对象之间复杂的沟通和控制方式。

6. 备忘录(Memento)

在不违反封装的情况下获得对象的内部状态,从而在需要时可以将对象恢复到最初状态。

7. 观察者(Observer)

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

8. 状态(State)

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

9. 策略(Strategy)

定义一系列算法,封装每个算法,并使它们可以互换。

策略模式可以让算法独立于使用它的客户端。

10. 模板方法(Template Method)

定义算法框架,并将一些步骤的实现延迟到子类。

通过模板方法,子类可以重新定义算法的某些步骤,而不用改变算法的结构。

11. 访问者(Visitor)

为一个对象结构(比如组合结构)增加新能力。

12. 空对象(Null)

使用什么都不做的空对象来代替 NULL。

一个方法返回 NULL,意味着方法的调用端需要去检查返回值是否是 NULL,这么做会导致非常多的冗余的检查代码。并且如果某一个调用端忘记了做这个检查返回值,而直接使用返回的对象,那么就有可能抛出空指针异常。

三、行为型模式 : 涉及到算法和对象之间职责的分配.行为模式不仅描述对象或类的模式,还描述它们之间的通信模式.

1. 适配器(Adapter)

把一个类接口转换成另一个用户需要的接口。

2. 桥接(Bridge)

将抽象与实现分离开来,使它们可以独立变化。

3. 组合(Composite)

将对象组合成树形结构来表示“整体/部分”层次关系,允许用户以相同的方式处理单独对象和组合对象。

4. 装饰(Decorator)

为对象动态添加功能。

5. 外观(Facade)

提供了一个统一的接口,用来访问子系统中的一群接口,从而让子系统更容易使用。

6. 享元(Flyweight)

利用共享的方式来支持大量细粒度的对象,这些对象一部分内部状态是相同的。

7. 代理(Proxy)

控制对其它对象的访问。

代理有以下四类:

  • 远程代理(Remote Proxy):控制对远程对象(不同地址空间)的访问,它负责将请求及其参数进行编码,并向不同地址空间中的对象发送已经编码的请求。
  • 虚拟代理(Virtual Proxy):根据需要创建开销很大的对象,它可以缓存实体的附加信息,以便延迟对它的访问,例如在网站加载一个很大图片时,不能马上完成,可以用虚拟代理缓存图片的大小信息,然后生成一张临时图片代替原始图片。
  • 保护代理(Protection Proxy):按权限控制对象的访问,它负责检查调用者是否具有实现一个请求所必须的访问权限。
  • 智能代理(Smart Reference):取代了简单的指针,它在访问对象时执行一些附加操作:记录对象的引用次数;当第一次引用一个对象时,将它装入内存;在访问一个实际对象前,检查是否已经锁定了它,以确保其它对象不能改变它。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值