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模式设计之 单例模式
模式设计是什么?初学者一开始会被这高大上的名称给唬住.而对于有丰富编程经验的老鸟来说,模式设计又是无处不在.很多接触的框架就是基于各种模式设计形成的. 简单说,在写代码的过程中一开始往往接触的是面向过 ...
随机推荐
- 洛谷P1208 [USACO1.3]混合牛奶 Mixing Milk【贪心+背包】
由于乳制品产业利润很低,所以降低原材料(牛奶)价格就变得十分重要.帮助Marry乳业找到最优的牛奶采购方案. Marry乳业从一些奶农手中采购牛奶,并且每一位奶农为乳制品加工企业提供的价格是不同的.此 ...
- nyoj29-求置转换问题
求转置矩阵问题 时间限制:3000 ms | 内存限制:65535 KB 难度:2 描述 求一个三行三列的转置矩阵. 输入 第一行一个整数n<20,表示有n组测试数据,下面是n组数据;每组测 ...
- jquery 绑定回车(Enter )事件
全局: $(function(){ document.onkeydown = function(e){ var ev = document.all ? window.event : e; if(ev. ...
- Git 基础教程 之 添加远程仓库
b, 本地内容推送至远程库上 git push -u origin master 实际上是把当前分支master推送到远程仓库,第一次推送时,加上-u参数, 表示Git不 ...
- Java Web学习总结(22)——使用kaptcha生成验证码
kaptcha是一个简单好用的验证码生成工具,通过配置,可以自己定义验证码大小.颜色.显示的字符等等.下面就来讲一下如何使用kaptcha生成验证码以及在服务器端取出验证码进行校验. 一.搭建测试环境 ...
- 洛谷 P2056 BZOJ 2743 [HEOI2012]采花
//表示真的更喜欢洛谷的题面 题目描述 萧芸斓是 Z国的公主,平时的一大爱好是采花. 今天天气晴朗,阳光明媚,公主清晨便去了皇宫中新建的花园采花.花园足够大,容纳了 n 朵花,花有 c 种颜色(用整数 ...
- hdu 1576扩展欧几里得算法
#include<stdio.h> #define ll long long /* 2.那么x,y的一组解就是x1*m1,y1*m1,但是由于满足方程的解无穷多个, 在实际的解题中一般都会 ...
- [bzoj1369][Baltic2003]Gem_树形dp_结论题
Gem bzoj-1369 Baltic-2003 题目大意:给你一棵树,让你往节点上添自然数,使得任意相邻节点的数不同且使得权值最小. 注释:n为结点个数,$1\le n\le 10^3$. 想法: ...
- Linux文件查找命令find(转)
Linux find命令用来在指定目录下查找文件.任何位于参数之前的字符串都将被视为欲查找的目录名.如果使用该命令时,不设置任何参数,则find命令将在当前目录下查找子目录与文件.并且将查找到的子目录 ...
- [\S\s]+ 可以匹配多行html,最常用的还是.*?
[\S\s]+ 可以匹配多行html,最常用的还是.*?