设计模式的概念
来源:互联网 发布:java empty string 编辑:程序博客网 时间:2024/04/29 00:35
1. 什么是设计模式?
设计模式是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。
2. 框架:
框架通常定义了应用体系的整体结构、类和对象的关系等设计参数,以便于具体应用实现者能集中精力于应用本身的特定细节。框架主要记录软件应用中共同的设计决策,框架强调设计服用,因此框架设计中必然要使用设计模式。
3. 模式的四个基本要素:
模式名称(pattern name) 问题(problem) 解决方案(solution) 效果(consequence)
4. 设计模式的四种作用:
外观(Facade):为了系统中的一组功能调用提供一个一致的接口,这个接口使得这一子系统更加容易使用;
装饰(Decorate):当不能采用生成子类的方法进行扩充时,动态地给一个对象添加一些额外的功能;
单件(Singleton):保证一个类仅有一个实例,并提供一个访问他的全局访问点;
模板方法(Template Method):在方法中定义算法的框架,而将算法中的一些操作步骤延迟到子类中实现。
5. 具体模式分类讨论:
A. 创建模式 -- 工厂模式:工厂模式专门负责将大量有共同接口的类实例化。
工厂模式几种形态:简单工厂(Simple Factory)、 工厂方法(Factory Method)、 抽象工厂(Abstract Factory)模式。
简单工厂模式:根据提供给它的数据返回几个可能类中的一个类的实例。通常它返回的类都有一个公共的父类和公共的方法。
角色与结构:
优点:工厂类含有必要的判断逻辑,可以决定在什么时候创建哪一个产品类的实例,客户端可以免除直接创建产品对象的责任,而仅仅"消费"产品。简单工厂模式通过这种做法实现了对责任的分割。
缺点:当产品有复杂的多层等级结构时,工厂类只有自己,以不变应万变,就是模式的缺点。因为工厂类集中了所有产品创建逻辑,一旦不能正常工作,整个系统都要受到影响。同时,系统扩展困难,一旦添加新产品就不得不修改工厂逻辑,有可能造成工厂逻辑过于复杂。另外,简单工厂模式通常使用静态工厂方法,这使得无法由子类继承,造成工厂角色无法形成基于继承的等级结构。
B. 创建模式 -- 工厂模式:
C. 创建模式 -- 抽象工厂模式:抽象工厂是一种创建型模式,是为了解决实例化时所带来的问题。
概述:在软件系统中,经常面临着“一系列相互依赖的对象”的创建工作;同时由于需求的变化,往往存在着更多系列对象的创建工作。如何应对这种变化?如果绕过常规的对象创建方法(new),提供一种“封装机制”来避免客户程序和这种“多系列具体对象创建工作”的紧耦合?这就是抽象工厂模式。
逻辑模型:
物理模型:
工厂模式的缘起:1、变化点在“对象创建”,因此就封装“对象创建”; 2、面向接口编程。
简单工厂问题:
1、不能应对“不同系列对象”的变化。如:我们要在上面的代码中加上其他的对象就不能很好的应对了
2、使用面向对象国内的技术来封装变化点
动机:在软件系统中,经常面临着“一系列相互依赖的对象”的创建工作;同时,由于需求的变化,往往存在更多系列对象的创建工作。面对这种问题,我们想绕过常规的对象创建方法,提供一种“封装机制”来避免客户程序和这种“多系列具体对象创建工作”的紧耦合。
意图:提供一个接口,让该接口负责创建一系列“相关或者相互依赖的对象”,无需指定他们的具体类。
Abstract Factory模式的几个要点:
1、如果没有应对“多系列对象构建”的需求变化,则没有必要使用Abstract Factory模式。
2、“系列对象”指的是这项对象之间有相互依赖、或作用的关系。
3、Abstract Factory模式主要在于应对“新系列”的需求变动。缺点是难以应对“新对象”的需求变动。这一点应该注意,就像前面说的,如果我们现在要在加入其他系列的类,代码的改动会很大。
4、Abstract Factory模式经常和Factory Method模式共同组合来应对“对象创建”的需求变化。
- 设计模式的概念
- 设计模式的概念
- 设计模式的概念
- 关于设计模式的概念
- MVC设计模式 的概念
- 体系结构,框架,库,设计模式,设计模式 的概念
- 设计模式非常有用的概念
- 一些基本的设计模式概念
- 设计模式的几个简单概念
- 设计模式的概念和分类
- 设计模式概念
- 设计模式概念
- 设计模式概念
- 设计模式概念
- 设计模式概念
- 设计模式概念
- 设计模式概念
- 设计模式概念
- 带有LOB字段的表迁移
- Jakarta log4j.xml に設定するログレベルの整理
- linux-3.2.7移植OK6410的SD卡驱动
- Implementing a new real-time scheduling policy for Linux
- error C2664 和 Add to Project不能用
- 设计模式的概念
- 标准2 维表问题
- 浅谈个人在瀑布流网页的实现中遇到的问题和解决方法
- Android ListView拖动时背景颜色会变成黑色的解决办法
- 黑马程序员-多线程和套接字
- poj-1860
- 线程池类Executors的运用
- int main(int argc,char * argv[]) windows 下的使用
- poj-2240