设计模式——类图以及类与类之间的关系

    设计模式在程序设计上有着很重要的作用,使用设计模式可以使得代码更容易被理解,使得代码更规范,真正实现工程化。

一、用UML表示一个类

类图一般是三行的结构:

  1. 类名称
  2. 属性:格式(可见性 名称:类型[=缺省值])
  3. 方法:格式(可见性 名称(参数列表)[返回类型])

注:在Visio中的画的类图中使用的是C#的数据类型,与Java的略有差别。

二、类与类之间的关系

类与类之间主要有6种关系,包括依赖,关联,聚合,组合,继承,实现。他们的耦合度是一次增强的。

1、依赖(Dependency)

    依赖主要体现了一种使用关系,两个相对独立的对象,当一个对象负责构造另一个对象的实例,或者依赖另一个对象的服务时,主要体现为依赖关系。

    依赖关系主要有3种表现形式:(以类A中使用了类B为例)

  1. 类B是作为类A的方法参数
  2. 类B是类A的方法中的局部变量
  3. 在类A中调用类B的静态方法

在依赖中使用的是“虚线+箭头”。

public class Student {
	public void read(Book book){
		System.out.println("读的书是:" + book.getName());
	}
	
	public void eat(Food food){
		System.out.println("吃的是:" + food.getName());
	}
}

2、关联(Association)

关联主要体现的是一种对应关系,两个相对独立的对象,当一个对象的实例与另一个对象的实例存在固定的对应关系时,这两个对象之间为关联关系。通常是将一个类的对象作为另一个类的成员变量。

关联关系的分类:

  1. 单向关联
  2. 双向关联

(单向关联)

(双向关联)

public class Student{
	private String id;
	private ClassName className;

	public Student(String id){
		this.id = id;
		this.className = new ClassName();
	}
}

3、聚合(Aggregation)

聚合是关联关系的一种,表现了一种弱的“拥有”关系,关联关系的对象之间是相互独立的,但是聚合关系的对象之间存在着一种包容关系,体现的是A对象可以包容B对象,但是B对象不是A对象的一部分。他们之间是“整体-个体”的关系。

成员对象通常作为构造方法、Setter方法或业务方法的参数注入到整体对象中。

public class People{
	private Student student;
	private Worker worker;
	private Farmer farmer;

	public People(Student student, Worker worker, Farmer farmer){
		this.student = student;
		this.worker = worker;
		this.farmer = farmer;
	}
}

4、组合(Composition)

    组合是一种强的“拥有”关系,组合中的类之间是“整体-部分”的关系,“整体”负责“部分”的生命周期,“部分”和“整体”的生命周期是一样的,“部分”单独存在是没有任何意义的。通常在整体类的构造方法中直接实例化成员类。

public class Bird{
	private Wing wing;

	public People(){
		wing = new Wing();
}

5、继承(Generalization)

   继承表示的是类与类之间或者接口与接口之间的父子关系,在java中使用的是extends关键字。

public class Bird extends Animal{
	
}

6、实现(Implementation)

   实现表示的是一个类实现一个或者多个接口,在java中使用的是implements关键字。

public class Bird implements Animal{
	
}

参考文献

  1. 深入浅出UML类图(http://www.uml.org.cn/oobject/201211231.asp)
  2. 设计模式中类的关系(http://blog.csdn.net/zhengzhb/article/details/7187278)

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏程序你好

C# 7.3新特性一览

10730
来自专栏信数据得永生

JavaScript 编程精解 中文第三版 五、高阶函数

314100
来自专栏xx_Cc的学习总结专栏

iOS底层原理总结 - Category的本质

iOS底层原理总结 - Category的本质 面试题 Category的实现原理,以及Category为什么只能加方法不能加属性。 Category中有loa...

41260
来自专栏青玉伏案

窥探Swift之使用Web浏览器编译Swift代码以及Swift中的泛型

   有的小伙伴会问:博主,没有Mac怎么学Swift语言呢,我想学Swift,但前提得买个Mac。非也,非也。如果你想了解或者初步学习Swift语言的话,你可...

19750
来自专栏xx_Cc的学习总结专栏

iOS底层原理总结 - 探寻Runtime本质(二)

28220
来自专栏磐创AI技术团队的专栏

Python开发的十个Tips,你知道几个?

下面是十个Python中很有用的贴士和技巧。其中一些是初学这门语言常常会犯的错误。

10220
来自专栏Java 源码分析

数据结构Stack

​ 在很多应用中,我们需要维护多个对象的集合,这种操作非常简单。我们可能想要向集合中 加入某个元素,去掉某个元素,以及遍历 集合中的元素并对他们执行某种操...

34160
来自专栏琦小虾的Binary

map 学习(下)——C++ 中的 hash_map, unordered_map

map 学习(下)——C++ 中的 hash_map, unordered_map 接上篇《map 学习(一)——C++中 map 的使用》。 一、hash_m...

3.7K70
来自专栏技术小站

Python 基础 (-)

Python 单词是“大蟒蛇”的意思。但是龟叔不是喜欢蟒蛇才起这个名字,而是正在追剧:英国电视喜剧片《蒙提·派森的飞行马戏团》(Monty Python and...

2K40
来自专栏谦谦君子修罗刀

swift4.0语法杂记(精简版)

一、swift简史 1、介绍 swift是苹果公司于2014年推出用于撰写OS和iOS应用程序的语言。它由苹果开发者工具部门总监“克里斯.拉特纳”在2010年...

48190

扫码关注云+社区

领取腾讯云代金券