UML+模式设计概述
转自于:http://blog.csdn.net/rexuefengye/article/details/13020225
工程学:工程庞大到一定程度必须是用工程学方法,好比直接用水泥沙子建设实用的摩天大厦是极其困难的。
标准类模型:这或许是AI实现的必经之路吧!类似于Java托管代码的实现方式...
UML软件工程组织:状态图与流程图
Uml图的使用入门:http://www.open-open.com/lib/view/open1328059700311.html 来自于http://www.open-open.com
画流程图需要注意的几个问题:http://developer.51cto.com/art/201007/209790.htm
详细解释各种图:http://www.cnblogs.com/jiqing9006/p/3344221.html
一、设计模式分类:
按照目的来分,设计模式可以分为创建型模式、结构型模式和行为型模式。(分类如下表)
- 创建型模式用来处理对象的创建过程;
- 结构型模式用来处理类或者对象的组合;
- 行为型模式用来对类或对象怎样交互和怎样分配职责进行描述。
表1-1
|
设计模式分类 |
说明 |
备注 |
|
|
创建型模式 |
(Factory Method Pattern) |
定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类中。 |
|
|
(Abstract Factory Pattern) |
提供一个创建一系列相关或者相互依赖的接口,而无需指定它们具体的类。 |
||
|
(Builder Pattern) |
将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示。 |
||
|
(Prototype Pattern) |
用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。 |
||
|
(Singleton Pattern) |
保证一个类仅有一个实例,并提供一个访问它的全局访问点。 |
||
|
结构型模式 |
(Adapter Pattern) |
将一个类的接口转换成客户希望的另外一个接口。使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。 |
|
|
桥接模式(Bridge Pattern) |
将抽象部分与实际部分分离,使它们都可以独立的变化。 |
||
|
(Composite Pattern) |
将对象组合成树形结构以表示“部分--整体”的层次结构。使得用户对单个对象和组合对象的使用具有一致性。 |
||
|
(Decorator Pattern) |
动态的给一个对象添加一些额外的职责。就增加功能来说,此模式比生成子类更为灵活。 |
||
|
(Facade Pattern) |
为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。 |
||
|
(Flyweight Pattern) |
以共享的方式高效的支持大量的细粒度的对象。 |
||
|
(Proxy Pattern) |
为其他对象提供一种代理以控制对这个对象的访问。 |
||
|
行为型模式 |
(Chain of Responsibility Pattern) |
在该模式里,很多对象由每一个对象对其下家的引用而连接起来形成一条链。请求在这个链上传递,直到链上的某一个对象决定处理此请求,这使得系统可以在不影响客户端的情况下动态地重新组织链和分配责任。 |
|
|
(Command Pattern) |
将一个请求封装为一个对象,从而使你可用不同的请求对客户端进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作。 |
||
|
(Interpreter Pattern) |
描述了如何为简单的语言定义一个语法,如何在该语言中表示一个句子,以及如何解释这些句子。 |
||
|
(Iterator Pattern) |
提供了一种方法顺序来访问一个聚合对象中的各个元素,而又不需要暴露该对象的内部表示。 |
||
|
(Mediator Pattern) |
定义一个中介对象来封装系列对象之间的交互。终结者使各个对象不需要显示的相互调用 ,从而使其耦合性松散,而且可以独立的改变他们之间的交互。 |
||
|
(Memento Pattern) |
在不破坏封装的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。 |
||
|
(Observer Pattern) |
定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。 |
||
|
状态模式(State Pattern) |
允许一个对象在其内部状态改变时改变它的行为,使对象看起来似乎修改了它的类。 |
||
|
策略模式(Strategy Pattern) |
准备一组算法,并将每一个算法封装起来,使得它们可以互换。 |
||
|
(Template Method Pattern) |
使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。 |
||
|
(Visitor Pattern) |
表示一个作用于某对象结构中的各元素的操作,它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作。 |
||
二、六大设计原则:
|
六大设计原则 |
说明 |
备注 |
|
SRP(单一职责原则) |
有且只有一个原因引起类的变更。 |
|
|
LSP(里氏替换原则) |
子类必须完全实现父类接口,在系统中完全可以用子类替换父类,即子类型必须能够替换它们的基类型。 |
|
|
DIP(依赖倒转原则) |
1. 高层模块不应该依赖于低层模块,二者都应该依赖于抽象。 2. 抽象不应该依赖于实现细节,实现细节应该依赖于抽象。 |
|
|
ISP(接口隔离原则) |
不能强迫用户去依赖那些他们不使用的接口。 |
|
|
LOD(迪米特原则) |
只和友元类交流,出现在成员变量,函数输入输出参数中的类,是朋友类。强调类之间的松散耦合。 |
|
|
OCP(开放-封闭原则) |
对扩展开放,对修改封闭。 |
UML+模式设计概述的更多相关文章
- 使用工厂方法模式设计能够实现包含加法(+)、减法(-)、乘法(*)、除法(/)四种运算的计算机程序,要求输入两个数和运算符,得到运算结果。要求使用相关的工具绘制UML类图并严格按照类图的设计编写程序实
2.使用工厂方法模式设计能够实现包含加法(+).减法(-).乘法(*).除法(/)四种运算的计算机程序,要求输入两个数和运算符,得到运算结果.要求使用相关的工具绘制UML类图并严格按照类图的设计编写程 ...
- 1、使用简单工厂模式设计能够实现包含加法(+)、减法(-)、乘法(*)、除法(/)四种运算的计算机程序,要求输入两个数和运算符,得到运算结果。要求使用相关的工具绘制UML类图并严格按照类图的设计编写程
1.使用简单工厂模式设计能够实现包含加法(+).减法(-).乘法(*).除法(/)四种运算的计算机程序,要求输入两个数和运算符,得到运算结果.要求使用相关的工具绘制UML类图并严格按照类图的设计编写程 ...
- OO_Unit4 UML模型化设计总结
OO_Unit4 UML模型化设计总结 任务简介:本单元在介绍了UML中几种基本的模型图元素的基础上,通过实现课程组提供的官方接口来完成自己的UML解析器. 架构设计 本单元最终的整体架构图如下(不包 ...
- 分享基于Entity Framework的Repository模式设计(附源码)
关于Repository模式,在这篇文章中有介绍,Entity Framework返回IEnumerable还是IQueryable? 这篇文章介绍的是使用Entity Framework实现的Rep ...
- php模式设计之 观察者模式
这是我写的<php模式设计>的第五篇.前面的四篇在不断学习不断加深认识,到了今天再看观察者模式,觉得非常容易理解.这也许就是我们积少成多的结果吧.希望还是能够不断进步. 开篇还是从名字说起 ...
- php模式设计之 适配器模式
在这个有没有对象都要高呼“面向对象”的年代,掌握面向对象会给我们带来意想不到的方便.学编程的小伙伴从开始能写几行代码实现简单功能到后来懂得将一些重复的操作组合起来形成一个“函数”,再到后来将“函数”和 ...
- php模式设计之 注册树模式
在前两篇单例模式和工厂模式后,终于迎来了最后一个基础的设计模式--注册树模式. 什么是注册树模式? 注册树模式当然也叫注册模式,注册器模式.之所以我在这里矫情一下它的名称,是因为我感觉注册树这个名称更 ...
- php模式设计之 工厂模式
承接上篇php模式设计之 单例模式,(虽然好像关系不大).今天讲述第二种基础的模式设计——工厂模式. 那么何为工厂模式? 从名字来看,似乎看不出什么端倪.工厂模式,和生产有关?还是和生产流程有关?难道 ...
- php模式设计之 单例模式
模式设计是什么?初学者一开始会被这高大上的名称给唬住.而对于有丰富编程经验的老鸟来说,模式设计又是无处不在.很多接触的框架就是基于各种模式设计形成的. 简单说,在写代码的过程中一开始往往接触的是面向过 ...
随机推荐
- 【剑指Offer】45、扑克牌顺子
题目描述: LL今天心情特别好,因为他去买了一副扑克牌,发现里面居然有2个大王,2个小王(一副牌原本是54张^_^)...他随机从中抽出了5张牌,想测测自己的手气,看看能不能抽到顺子,如果抽到 ...
- [转载]Linux内存高,触发oom-killer问题解决
最近遇到两起Linux的内存问题,其一是触发了oom-killer导致系统挂 首先确认该系统的版本是32位 #uname -a Linux alarm 2.6.9-67.ELsmp #1 SMP We ...
- Linux简单的进度条
echo '进度条' i= bar="" ] do let idx=i% printf "[%-100s][%d%%]\r" "$bar" ...
- 21.实验基于_version进行乐观锁并发控制
21.实验基于_version进行乐观锁并发控制 主要知识点: 实验基于_version进行乐观锁并发控制 1.实验实战演练基于_version进行乐观锁并发控制 (1)先构造一条数据出来 PUT / ...
- 系统报 “client没有所需的特权” 的解决方法
今在对服务端代码进行单元測试的时候.突然报出例如以下错误: client没有所需的特权 后经网上查找,相同的问题都是属于对C盘读写的问题.回忆自己的项目也须要对C盘进行创建文件夹和读写文件.故尝试运行 ...
- Spark MLlib Deep Learning Deep Belief Network (深度学习-深度信念网络)2.2
Spark MLlib Deep Learning Deep Belief Network (深度学习-深度信念网络)2.2 http://blog.csdn.net/sunbow0 第二章Deep ...
- 学习日记之原型模式和Effective C++
原型模式(Prototype):用原型实例制定创建对象的种类,而且听过拷贝这些原型创建新的对象. 浅复制:假设字段是值类型的,则对该字段运行逐位复制.假设字段是引用类型.则复制引用但不复制引用的对象. ...
- 我的红外arduino链接,!!!!
点击打开链接http://blog.csdn.net/g1342522389/article/details/46272473 一定要赞,小编非常辛苦.
- int*与(int*)的差别
晚上被问到一个C++的问题: int **pa=new int* [5]; int *pb=new (int*)[5]; 上面两行代码的差别是什么? 分析与实验结果例如以下: (1)第一行代码能够在V ...
- Linux系统调用具体解释(怎样从用户空间进入内核空间)
系统调用概述 计算机系统的各种硬件资源是有限的,在现代多任务操作系统上同一时候执行的多个进程都须要訪问这些资源,为了更好的管理这些资源进程是不同意直接操作的,全部对这些资源的訪问都必须有操作系统控制. ...