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模式设计之 单例模式
模式设计是什么?初学者一开始会被这高大上的名称给唬住.而对于有丰富编程经验的老鸟来说,模式设计又是无处不在.很多接触的框架就是基于各种模式设计形成的. 简单说,在写代码的过程中一开始往往接触的是面向过 ...
随机推荐
- C语言中时钟编程
目录 C语言中时钟编程 1. 文章目的 2.基本概念 2.1 UTC时间 2.2 UNIX纪元时间 2.3 格林威治时间 (GMT) 3.时间转换 3.1 asctime函数 3.2 ctime函数 ...
- STM32F103 rtthread工程构建
目录 STM32F103 工程构建 1.基本情况 2.硬件连接 3.rtthread配置 4.点灯 5. 码云上git操作 STM32F103 工程构建 1.基本情况 RAM 20K ROM 64K ...
- github+hexo(window10)
一.申请github账户 二.先安装node.js.git 本地: 三.安装hexo(建立静态网页,用Markdown写博客) 1.创建文件地址 在合适的地方新建一个文件夹,用来存放自己的博客文件,比 ...
- eas设置时分秒
- [转载]ext4文件系统的delalloc选项造成单次写延迟增加的分析
转载http://www.cnblogs.com/cobbliu/p/5603472.html 最近我们的服务进程遇到kill -15后处于Z的状态,变为了僵尸进程,经过/proc/{thread_i ...
- nyoj113-字符串替换
字符串替换 时间限制:3000 ms | 内存限制:65535 KB 难度:2 描述 编写一个程序实现将字符串中的所有"you"替换成"we" 输入 输入包 ...
- LeetCode SQL题目(第一弹)
LeetCode SQL题目 注意:Leetcode上的SQL编程题都提供了数据表的架构程序,只需要将它贴入本地数据库即可调试自己编写的程序 不管是MS-SQL Server还是MySQL都需要登陆才 ...
- [bzoj3507 Cqoi2014]通配符匹配 (hash+DP)
传送门 Solution 显然用哈希233 设\(f[i][j]\)表示第i个通配符和当前第j个字符是否匹配 考虑两种通配符的特性,直接转移即可 Code #include <cstdio> ...
- Problem 20
Problem 20 问题网址:https://projecteuler.net/problem=20 n! means n × (n − 1) × ... × 3 × 2 × 1阶乘For exam ...
- Ubuntu 14.04远程登录服务器
本系列文章由 @yhl_leo 出品,转载请注明出处. 文章链接: http://blog.csdn.net/yhl_leo/article/details/51285545 本文讲述在Ubuntu ...