概述
目录
1、设计模式定义
2、学习设计模式意义
3、设计模式基本要素
4、设计模式分类
1、设计模式定义
“每一个模式描述了一个在我们周围不断重复发生的问题,以及该问题的解决方案的核心”。
设计模式是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结,它描述了在软件设计过程中的一些不断重发生的问题,以及该问题的解决方案,其目的是为了提高代码的可重用性、代码的可读性和代码的可靠性。
2、学习设计模式意义
设计模式的本质是面向对象设计原则的实际运用,是对类的封装性、继承性和多态性以及类的关联关系和组合关系的充分理解,
一个设计模式命名、抽象和确定了一个通用设计结构的主要方面,这些设计结构能被用来构造可复用的面向对象设计。设计模式确定了所包含的类和实例,它们的角色、写作方式以及职责分配。每一个设计模式都集中于一个特定的面向对象设计问题或设计要点,描述了什么时候使用它,在另一些设计约束条件下是否还能使用,以及使用的效果和如何取舍。
优点:
-
可以提高程序员的思维能力、编程能力和设计能力。
-
使程序设计更加标准化、代码编制更加工程化,使软件开发效率大大提高,从而缩短软件的开发周期。
-
使设计的代码可重用性高、可读性强、可靠性高、灵活性好、可维护性强。
3、设计模式基本要素
设计模式的基本要素包括:模式名称、别名、动机、问题、解决方案、效果、结构、模式角色、合作关系、实现方法、适用性、已知应用、例程、模式扩展和相关模式等
其中最关键的元素包括以下 4 个要素:
■ 模式名称(pattern name):设计模式的名称简洁地描述了设计模式的问题、解决方案和效果。好的模式名称有助于我们理解和记忆该模式,便于设计人员之间交流思想,进行抽象讨论及研究设计结果。
■ 问题(problem)描述了应该在何时使用模式即该模式的应用环境。它解释了设计问题和问题存在的前因后果,以及使用模式必须满足的一系列先决条件。
■ 解决方案(solution)描述了设计的组成成分,它们之间的相互关系及各自的职责和协作方式。模式就像一个模板,可应用于多种不同场合,因此解决方案并不描述一个特定而具体的设计或实现,而是提供设计问题的抽象描述和怎样用一个具有一般意义的元素组合(类或对象组合)来解决这个问题。
■ 效果(consequences)描述了模式应用的效果及使用模式应权衡的问题,即模式的优缺点。其用来描述设计模式的利弊,它往往是衡量模式是否可用的重要因素,对于评价设计选择和理解使用模式的代价及好处具有重要意义。软件效果大多关注对时间和空间的衡量,表述了语言和实现问题。因为复用是面向对象设计的要素之一,所以模式效果包括其对系统的灵活性、扩展性或可移植性的影响,显式地列出这些效果对理解和评价这些模式具有很大的帮助。
4、设计模式分类
了解设计模式分类之前,在这里对23种设计模式进行简要的了解,之后章节会对每一种进行详细的介绍:
■ 抽象工厂模式(Abstract Factory):提供一个创建一系列相关或相互依赖对象的接口,而无需指定具体类。
■ 适配器模式(Adapter):将一个类的接口变换成客户所期待的另一接口,从而使原本因接口不兼容而无法在一起工作的两个类能够在一起工作。
■ 桥梁模式(Bridge):也叫桥接模式,将抽象和实现解耦,使得两者可以独立变化。
■ 建造者模式(Builder Pattern):将一个复杂对象的构建与他的表示分离,使得同样的构建过程可以创建不同的表示。(将一个复杂对象分解成多个相对简单的部分,然后根据不同需求创建)
■ 责任链模式(Chain of Responsibility):使多个对象都有机会处理请求,从而避免了请求的发送者和接受者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有对象处理它为止。
■ 命令模式(Command):是一种高内聚的模式,将一个请求封装成一个对象,从而使用不同的请求把客户参数化,对请求排队或者记录请求日志,可以提供命令的撤销和恢复功能
■ 组合模式(Composite):也叫合成模式,将对象组合成树形结构以表示“部分—整体”的层次结构,使得用户对单个对象和组合对象的使用具有一致性。
■ 装饰模式(Decorator):动态地给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更为灵活。
■ 外观模式(Facade):也叫门面模式,要求一个子系统的外部与其内部的通信必须通过一个统一的对象进行,外观模式提供一个高层次的接口,使得子系统更易于使用。
■ 工厂方法模式(Factory Pattern):在工厂方法模式中,工厂类成为了抽象类,实际的创建工作将由其具体子类来完成。工厂方法的用意是定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类中去,由子类决定生产什么产品。
■ 享元模式(Flyweight):是池技术的重要实现方式,使用共享对象可有效地支持大量的细粒度的对象。
■ 解释器模式(Interpreter):给定一门语言,定义它的文法的一种表示,并定义一个解释器,该解释器使用该文法表示来解释语言中的句子。
■ 迭代器模式(Iterator):提供一种方法访问一个容器对象中的各个元素,而又不需要暴露该对象的内部细节。
■ 中介者模式(Mediator):用一个中介对象封装一系列的对象交互,中介者使各对象不需要显式地相互作用,从而使其耦合松散,而且可以独立地改变它们之间的交互。
■ 备忘录模式(Memento):在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。以后就可将对象回复到保存的状态。
■ 观察者模式(Observer):也叫发布订阅模式,定义对象间的一种一对多的依赖关系,使得每当一个对象改变状态,则所有依赖于它的对象都会得到通知并被自动更新。
■ 原型模式(Prototype Pattern):原型模式和工厂模式一样,同样对客户隐藏了对象创建工作,但与通过对一个类进行实例化来构造新对象不同的是,原型模式是通过复制一个现有对象生成新对象
■ 代理模式(Proxy):为其他对象提供一种代理以控制对该对象的访问。即客户端通过代理间接地访问该对象,从而限制、增强或修改该对象的一些特性。
■ 单例模式(Singleton Pattern):保证一个类仅有一个实例,并提供一个访问她的全局访问点。
■ 状态模式(State):当一个对象内部状态改变时允许其改变行为,这个对象看起来像改变了其类型,状态模式的核心是封装,状态的变更引起行为的变更。
■ 策略模式(Strategy):也叫政策模式,定义一组算法,将每个算法都封装起来,并且使它们之间可以互换。本模式使得算法的变化可独立于使用它的客户
■ 模板方法模式(Template Method):定义一个操作中的算法的框架,而将一些步骤延迟到子类中,使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。
■ 访问者模式(Visitor):封装一些作用于某对象结构中的各元素的操作,它可以在不改变各元素的类的前提下定义作用于这些元素的新的操作。
设计模式有两种分类方法,即根据模式的目的(用来完成什么工作)和模式的作用范围(用于类还是对象)来分:
-
依据目的可分为:创建型(Creational)、结构型(Structural)、行为型(Behavioral);
创建型(Creational):用来创建对象的模式,抽象了实例化的过程,主要特点是“将对象的创建与使用分离”即帮助一个系统独立于其关联对象的创建、组合和表示方式。
所有的创建型模式都有两个主要功能:
■ 将系统所使用的具体类的信息封装起来;
■ 隐藏类的实例是如何被创建和组织的。外界对于这些对象只知道它们共同的接口,而不清楚其具体的实现细节。
正因为以上两点,创建型模式在创建什么(what),由谁(who)来创建,以及何时(when)创建这些方面,都为软件设计者提供了尽可能大的灵活性。
GoF 中提供了单例、原型、工厂方法、抽象工厂、建造者 5 种创建型模式。
结构型(Structural):讨论的是类和对象的结构,它采用继承机制来组合接口或实现(类结构型模式),或者通过组合一些对象实现新的功能(对象结构型模式)。
GoF 中提供了代理、适配器、桥接、装饰、外观、享元、组合 7 种结构型模式。
行为型(Behavioral):关注的是对象的行为,用来解决对象之间的联系问题。
GoF 中提供了模板方法、策略、命令、职责链、状态、观察者、中介者、迭代器、访问者、备忘录、解释器11 种行为型模式。
-
依据作用范围可分为:类模式、对象模式;
类模式:用于处理类与子类之间的关系,这些关系通过继承来建立,是静态的,在编译时刻便确定下来了。
GoF中的工厂方法、(类)适配器、模板方法、解释器属于该模式。
对象模式:用于处理对象之间的关系,这些关系可以通过组合或聚合来实现,在运行时刻是可以变化的,更具动态性。
GoF 中除了以上 4 种,其他的都是对象模式。
GoF 的 23 种设计模式的分类表
范围目的 | 创建型模式 | 结构型模式 | 行为型模式 |
类模式 | 工厂方法(Factory Pattern) | (类)适配器(Adapter) | 模板方法(Template Method)、解释器(Interpreter) |
对象模式 | 单例(Singleton Pattern) 原型(Prototype Pattern) 抽象工厂(Abstract Factory) 建造者(Builder Pattern) | 代理(Proxy) (对象)适配器(Adapter) | 策略(Strategy) 命令(Command) 职责链(Chain of Responsibility) 状态(State) 观察者(Observer) 中介者(Mediator) 迭代器(Iterator) 访问者(Visitor) 备忘录(Memento) |
最后
以上就是可爱豆芽为你收集整理的一、设计模式概述的全部内容,希望文章能够帮你解决一、设计模式概述所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复