设计模式初探

1.适配器模式

类适配器

对象适配器

默认适配器模式

2.桥梁模式

将抽象化与实现脱耦,使得二者可以独立的变化

桥接:为被分离了的抽象部分和实现部分来搭桥

如何桥接:桥接在程序上就体现成了在抽象部分拥有实现部分的接口对象

谁来桥接的问题:

就是谁来负责创建抽象部分和实现部分的关系

3.组合模式 Composite

将对象组合成树形解雇以表示"整体-部分"的层次结构

4.享元模式 FlyWeight

采用一个共享来避免大量拥有相同内容对象的开销

5.责任链模式

当客户提交一个请求时,从第一个对象开始,链中收到请求的对象要么亲自处理它,要么转发给链中的下一个候选者。

6.模板模式

定义了一个操作中的算法骨架,将一些步骤延迟到子类中。

基本方法:基本方法也称为基本操作,是由子类实现的方法,并且再模板方法中调用

模板方法:一般是一个具体的方法,也就是一个骨架,实现对基本方法的调度完成固定的逻辑

钩子方法:由抽象类申明并加以实现

7.命令模式:从界面设计中提取出来的一种分离耦合,提高重用的方法,被认为是最

优雅最简单的模式

命令模式的接收者:接受者可以是任意的类,对它没有什么特殊要求,这个对象知

道如何真正执行命令的操作,执行时是从command的实现类里面调转过来

智能命令:代替接收者实现命令要求的功能

发起请求的对象和真正实现的对象是解耦的

Receiver

Command

Invoker

Client

8.状态模式

允许一个对象在其内部状态改变的时候改变其行为。状态模式的功能就是分离状态的行为,通过维护状态的变化,来调用不同状态对应的不同功能。也就是说:状态和行为是相关联的,它们的关系可以描述为:状态决定行为。

9.外观模式(Facade)

为一个复杂子系统提供一个简单接口

提供子系统额独立性

在层次化结构中,可以使用Facade模式定义系统中的每一层的入口

10.策略模式(Strategy)

策略模式又称为算法族模式,就是定义了不同的算法族,并且相互之间可以互相替换,此模式让算法的变化独立于使用算法的客户。

策略模式属于对象行为型模式。

策略模式中存在如下几个对象:

环境对象:该类中实现了对抽象策略中定义的接口或者抽象类的引用

抽象策略模式:它可由接口或抽象类来实现

具体抽象模式:它封装了实现不同功能的不同算法

11.访问者模式(Visitor)

行为作为访问者,被访问对象接受,然后由访问对象执行

12.观察者模式(Observer)

对象的行为型模式,又叫发表-订阅模式

抽象主题角色

抽象观察者角色

具体主题角色

具体观察者角色

观察者模式的优点

观察者模式在被观察者和观察者之间建立一个抽象的耦合。被观察者角色所知道的只是一个具体的观察者列表,每一个具体的观察者都符合一个抽象观察者接口。

观察者模式支持广播通信

观察者模式

如果一个被观察者对象有很多的直接和间接的观察者的话,将所有观察者都通知到会花费很多时间

如果在被观察者之间存在循环依赖,被观察者会触发它们之间的循环调用,导致系统崩溃

如果对观察者的通知是通过另外的线程进行异步投递的话,系统必须保证投递是以自洽的方式进行

13.中介者模式

用一个中介对象来封装一系列交互对象

Mediator: 中介者接口

ConcreteMediator: 具体中介者实现对象。它需要维护各个同事对象之间的交互关系

Colleague: 同事类定义,所有具体同事类的父类,通常实现成抽象类,主要负责约束同事对象的类型,并实现一些具体同事类之间的功能。

ConcreteColleague: 具体的同事类,实现自己的业务,在需要与其他同事通信的时候,就与持有的中介者通信,中介者负责与其他同事进行交互。

广义中介者

去掉同事对象的父类

同事不定义Mediator接口,把具体的中介者实现成单例

同事对象不再持有中介者对象,而是在具体处理方法里面创建,或者获取,或者从参数传入需要的同事对象

14.备忘录模式

在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。

原发起类(Originator) 创建一个备忘对象,使用备忘录存储它的内部状态

负责人类(CareTaker)  负责保存好备忘录对象,不能检查或者操作备忘录的内容

备忘录类(Memento)  将原发器的内部状态存储起来,原发器根据需要决定备忘录存储原发器的哪些内部状态。防止原发器以外的其他对象访问备忘录。备忘录有两个接口,一个是窄接口,一个是宽接口。CareTaker 只能看到窄接口,它只能把备忘录传递给其他对象。相反,Originator看到是一个宽接口,允许它访问返回到先前状态所需的数据

15.代理模式

代理模式也称为委托模式,它是一项基本设计技巧。需要其他的模式(例如状态模式、策略模式、访问者模式)本质上是在更特殊的场合采用了代理模式。而且在日常的应用中,代理模式可以提供非常好的访问控制。

Subject(抽象主题角色) 普通的业务类型定义

RealSubject(具体主题角色)业务逻辑的具体执行者

Proxy(代理主题角色) 负责对真实角色的应用,且对真实角色处理完毕的事情做预处理和善后工作

普通代理

强制代理

虚拟代理

代理模式总结

职责清晰:真实的角色就是实现实际的业务逻辑,无须关心其他非本职职责的事务,通过后期的代理完成一件事务。

高扩展性:具体主题角色是随时都会发生变化的,只要它实现了接口,便被接口的规范约定

16.装饰模式

装饰模式包裹真实对象

17.工厂模式

简单工厂模式

不满足OCP原则,是为了提供接口实例化的选择

工厂方法模式

为了满足OCP原则而生

抽象工厂模式

对简单工厂模式的维度切分做了更加细致的规范

18.单例模式

系统级别存在一个唯一的实例

饿汉式加载

懒汉式加载    -- 需要使用同步锁机制进行

双重检验加锁    -- 为了解决懒汉式加载的性能慢问题,但是需要使用一个关键字volatile

静态内部类加载    -- 通过静态内部类方式解决性能问题

19. 建造者模式

将复杂的内部创建封装在内部,对于外部调用的人来说,只需要传入建造者和建造工具,关于内部是如何建造成成品的,调用者无需关系,实际设计与施工解耦,互不干扰。

20. 原型模式的总结

相比new的方式创建对象,原型模式性能优良

直接通过clone复制,构造函数是不会执行的

21. 迭代器

将数据存储和数据遍历的职责分离,增加新的聚合类需要对应增加新的迭代器类。

时间: 2024-09-30 07:33:35

设计模式初探的相关文章

设计模式初探—简单工厂模式

为什么要学习设计模式? 可重用.可维护.可扩展.灵活性好 什么是简单工厂模式? 从设计模式的类型上来说,简单工厂模式是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式,但不属于23种GOF设计模式之一.简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例.简单工厂模式是工厂模式家族中最简单实用的模式,可以理解为是不同工厂模式的一个特殊实现. 简单工厂模式的好处? (1)将具体业务和实现进行分离 (2)将多个具体业务之间进行解耦 解决的问题? 单独的类来创造

设计模式初探——简单工厂模式

学习设计模式已经有一段时间了,<大话>也正看第二遍,可是却迟迟不敢下笔.算了,先拿简单的开刀吧. 简单工厂模式是设计模式中一种比较简单.基础的设计模式. 定义: 由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类(这些产品类继承自一个父类或接口)的实例. 包含元素: 工厂(Creator)角色 简单工厂模式的核心,它负责实现创建所有实例的内部逻辑.工厂类可以被外界直接调用,创建所需的产品对象. 抽象产品(Product)角色 简单工厂模式所创建的所有对象的父类,它负责描述所有实例所共有的

设计模式初探(一)

序,设计模式就像修炼武功的心法口诀.虽不实用,但是却威力无穷,需要我们在代码设计,框架设计时多多品味. 一.Facade模式 一句话描述:为子系统中的一组接口提供了一个统一的接口. 解释:facade定义了一个更高级别的接口,使得子系统更易于使用.你可以使用facade来将一些复杂的对象交互简化成一个单独的接口. 二.

适配器设计模式初探(Java实现)

本篇随笔主要介绍Java实现设配器设计模式. 先来看下待解决的问题: (图片转自http://blog.csdn.net/jason0539) 由上图的情况可知,欧洲壁式插座只有三足插口,如果我们想要使用的是两足插口,就需要适配器来进行转换.(适配器一面是三足插口,一面是两足插口) 适配器模式一般有两种实现方式: 1.类适配器 2.对象适配器. 先来看下类适配器的UML图:  客户端只能操纵 Target 接口的 Request 方法来进行需要的操作(当然这里就相当于调用 Request 方法使

装饰器设计模式初探(Java实现)

本篇随笔主要介绍用Java实现简单的装饰器设计模式: 先来看一下装饰器设计模式的类图:  从图中可以看到,我们可以装饰Component接口的任何实现类,而这些实现类也包括了装饰器本身,装饰器本身也可以再被装饰. 下面是用Java实现的简单的装饰器设计模式,提供的是从基本的加入咖啡入手,可以继续加入牛奶,巧克力,糖的装饰器系统. 1 interface Component { 2 void method(); 3 } 4 class Coffee implements Component { 5

JS设计模式初探

目的:设计模式众多,尝试用博客记录下学到的不同设计模式的优劣,方便以后查阅. 前言:半年前看高程的时候看到设计模式这章,云里雾里,不是看不明白,而是不明白为啥要如此麻烦只为创建一个对象.直到最近完成了自己第一个小项目,才体会到当代码量多起来时没有适当的规范与限制是多么大的灾难.于是重新翻开高程,总结下几种我学到的简单设计模式的优劣. 正文:本文一共介绍7种设计模式以及他们的应用场景.优劣. 1.工厂模式 直接用函数来封装对象,将对象作为返回值. function person (name,age

设计模式初探(1)

写在本系列最前面: 在以前的印象中,设计模式似乎是一个非常高大上的东东,但是呢,要想从一个码农进阶到一个工程师,怎么能绕过这东西呢.无奈,找各种设计模式的书来看,得益于自己学习过多种语言的经验,先后学习了java,php,javascript里的设计模式后,总算对设计模式有了一知半解的了解,于是乎,想着将自己理解的东西记录一下,以便后用(健忘症必备技能). 为什么学习设计模式 1.设计可复用的面向对象的应用:(按套路出牌不会吃亏) 2.提高编程效率,减少重复编码:(不是复制粘贴) 3.帮助编程者

Java设计模式(一) 设计模式初探——简单工厂和工厂方法模式

一.引言 在面向对象的编程中,创建对象是最基本也是最常用的一种操作,合理的对象创建方法对提高代码的复用性和降低模块之间的耦合来说极其重要,而工厂模式就是专门为合理创建对象而提出的.在GoF总结的23种常用的设计模式中,工厂模式就有3种,分别为简单工厂.工厂方法和抽象工厂,本文将结结合简单的例子对面向对象的编程.简单工厂模式和工厂方法模式进行较为详细介绍,并给出完整的代码示例,至于抽象工厂方法,我将在后续的博客中进行详细地介绍. 借助于面向对象编程的封装特性,我们将一个完整事物的不同功能模块封装成

设计模式初探1——策略模式(Strategy Pattern)

最近在看<Head First 设计模式>,感觉挺有意思的,本系列的多数内容也是引自于它. 不过会加入一些自己的理解,代码肯定也是敲自己的啦~ 其实呢,我们在日常编程时或多或少都在使用着设计模式,只是我们没有意思它有那么一个"官方"的名称罢了, 比如下面的"策略模式"就是这样: 策略模式:定义算法族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化独立于使用算法的客户. 太官方了哈,还是写个测试代码看看: 为了鲜明,我们只保留主要代码,大致意思出