一步步学习设计模式系列之你必须要了解的概念和UML工具
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一步步学习设计模式系列之你必须要了解的概念和UML工具相关的知识,希望对你有一定的参考价值。
一、为什么要学习设计模式
使用设计模式的根本原因是为了保持类之间的隔离,防止相互之间了解太多内容;另一个重要的原因是,使用设计模式可以帮助我们避免重复开发。有很多策略能让程序员达到分离类的目的,其中包括封装和继承。一个继承父类的类能访问父类中所有非私有的的东西,如果以一个功能完整的类来继承层次结构,可能会过多的限制自己,也会给特定方法的实现带来累赘。因此设计模式建议应遵循以下原则:面向接口编程,而不是针对实现编程;优先使用对象组合,而不是继承。
(1)面向接口编程,而不是针对实现编程概述:
就是在任何类层次结构的顶端定义的是一个抽象类或一个接口,它没有实现方法,但定义了该类所需要支持的方法,这样在所有的派生类中可以自由实现这些方法,能最大限度的满足你的要求。
(2)优先使用对象组合,而不是继承概述:
这是一种可包含其他对象的对象结构,即把几个对象封装在一个对象中,我们一般会使用继承的方式,而随着你编写比较复杂的程序的时候,你会发现使用对象组合的优点。
二、老生常谈之C#基础知识
(1)virtual和override
如果基类中有一个方法,而想在派生类中覆盖它,而应该把基类中的方法声明为virtual,它的含义是,让派生类中具有同样函数签名的方法覆盖基类中发方法,而后在派生类中使用override关键字重写基类中的方法。
(2)使用new替换方法
当不能把基类中的方法声明为virtual时,另一种取代基类中的方法是,使用new 关键字,这样做能隐藏基类中同名的方法(与参数无关)。
代码示例:
public class Person { public virtual void SayHello() { Console.WriteLine("我是地球人"); } public void ChiHeLaSaShui() { Console.WriteLine("吃喝拉撒睡是每个人都会的技能!"); } }
public class Chinese : Person { public override void SayHello() { Console.WriteLine("我是中国人,你好!"); } public new void ChiHeLaSaShui() { Console.WriteLine("中国人讲究美食"); } }
(3)接口
接口本质上是一个规定,即所有实现该接口的类,都要实现接口中定义的方法。
(4)抽象类
抽象类声明了一个或对个没有实现的方法,如果把一个方法声明为抽象方法,则需要把类也声明为抽象类。
(5)UML(Unified Modeling Language)统一建模语言
为什么要建模:建模是为了能够更好地理解正在开发的系统
通过建模达到下面的目的
1、模型有助于按照实际情况或按照所需的样式对系统进行可视化
2、模型能够规约系统的结构或行为
3、模型给出了构造系统的模板
4、模型对做出的决策进行文档化
对于一个复杂的系统,如银行、电信系统建模的重要性就越大。如果不能很好的理解一个复杂系统,盲目开发,失败的可能性很大。
什么是UML:统一建模语言(Unified Modeling Language , UML) 是一种绘制软件蓝图的标准语言,可以用UML对软件密集的制品进行可视化、详述、构造和文档化。
1、可视化:清晰的模型有利于交流
2、详述:可以使用uml对分析、设计、实现等决策进行详细描述
3、构造:把uml描述映射成编程语言
4、文档化:系统的所有细节都可以是uml进行描述。如:项目计划、发布活动等
类的UML表示:
一群对象(object)享有相同的结构、行为、约束和语义时,称它们是同类(class)的对象。换句话说,定义一个类就相当于描述了一群对象。在类中, 使用属性(attribute)表达对象的结构, 使用操作(operation)表达对象的行为。
UML预设了四种可见性,分别为公开(public)、私有(private)、保护
(protected)、包(package) 减号(-)为私有可见性,加号(+)为公开可见性,#表示受保护的,静态方法带有下划线,抽象方法写成斜体或带有{abstract}标签。
在UML中抽象类与普通类是同一个类图表示,只是抽象类名字会变成斜体。
UML中的关系表示:
关系是事物之间的联系,在面向对象的建模中,有三种重要的关系是依赖、泛化、关联
1)依赖(Dependency)
依赖是一种使用关系,一个事物使用另一个事物。在图形上,把依赖画成一条有方向的虚线,指向被依赖的事物。如果被使用的类发生变化,那么另一个类的操作必然受影响。
2)泛化(Generalization)
在泛化关系中,子类继承了父类的行为和含义,子类也可以增加新的行为和含义或覆盖父类中的行为和含义。在图形上,在泛化画成一个带有空心三角行指向父类。
在.Net里面泛化就是继承关系。
3)关联(Association)
关联是一种结构关系,它指明一个对象与另一个对象间的关系。
classA和classB相关联
相互关联体现的是两个类、或者 类与接口之间语义级别的一种强依赖关系,是一种长期的稳定的关系;表现在代码层面,为被关联类以类属性的形式出现在关联类中,也可能是关联类引用了一个类型为被关联类的全局变量。
单向关联:
ClassA关联于ClassB
单向关联表现在代码层面,为被关联类B以类属性的形式出现在关联类 A中,也可能是关联类A引用了一个类型为被关联类B的全局变量;
聚合关系(Aggregation)
聚合是关联关系的一种特例,他体现的是整体与部分拥有的关系。此时整体与部分之间是可分离的,他们可以具有各自的生命周期,部分可以属于多个整体对象,也可以为多个整体对象共享;比如汽车与发动机;表现在代码层面,和关联关系是一致的,只能从语义级别来区分。
组合关系(Composition)
组合也是关联关系的一种特例,这种关系比聚合更强,也称为强聚合;他同样体现整体与部分间的关系,但此时整体与部分是不可分的,整体的生命周期结束也就意味着部分的生命周期结束;孕妇死了胎儿自然也就死了;表现在代码层面,和关联关系是一致的,只能从语义级别来区分。
关联关系的多重性
不建议使用双向关联. 关联有两个端点, 在每个端点可以有一个基数, 表示这个关联的类可以有几个实例.
常见的基数及含义
- 0..1:0 或1 个实例.
- 0..*: 对实例的数目没有限制.
- 1: 只能有一个实例.
- 1..*: 至少有一个实例.
接口
接口(interface)如同契约,负责的类必须负责实现它的公开操作,以及负责维护它的公开属性。
案例:
好了,UML就简单介绍到这里,后面的文章会一一详细介绍23种设计模式。讲的不好,希望大神们多多指教,相互学习,共同进步。
最后,附上UML工具:链接:http://pan.baidu.com/s/1nva43c1 密码:v65t
至于如何破解,我就不告诉你了,自己到网上搜。
以上是关于一步步学习设计模式系列之你必须要了解的概念和UML工具的主要内容,如果未能解决你的问题,请参考以下文章