我们都学会了UNL。在类图中有6一流的关系:概括(继承)、实现、联想、组合、聚合、依靠。因为有各种各样的它们之间的联系,我将他们入4分类:依赖、关联、继承、实现。

整理如图:

从这个图中,我们就能够看出我是怎样划分的了:聚合和组合是关联的特殊形式,所以就这样划分了。

我们知道,这6个关系的耦合的耦合度:继承=实现<依赖<关联<聚合<组合。

那么下一步,我们就看看。他们在设计模式的代码中是如何实现的。

1、依赖关系

依赖关系的定义非常绕口,事实上说白了就是:一个对象依赖于还有一个对象的服务。在C#中的实现非常easy就是:A依赖于B对象。那么B对象大多数情况下是A对象的方法參数、方法局部变量或者是静态方法调用。

举个样例:

植物的生长须要水和阳光,就是依赖关系。阳光和水是植物的吸收和吸取方法的參数。用C#代码实现就是:

    public class Plant{public void absort(Sunshine sun){Console.Write("吸收阳光");}public void ShutUp(Water water){Console.Write("吸收水分");}}

2、关联

对于两个相对独立的对象,当一个对象的实例与还有一个对象的额特定实例存在固定的相应关系。关联表现为:类A其中使用了类B作为成员变量。

如上图。代码实现为:

    public class Son{Father father = new Father();public void getGift(){Console.Write("从" + father.getname()+"获得礼物");}}

3、聚合

聚合是特殊的关联,反映了“总体”-"部分"的关系。

聚合关系耦合度强于关联,他们的代码表现是同样的,不过在语义上有所差别:聚合关系的对象之间存在着包容关系,他们之间是“总体-个体”的相互关系。

代码实现:

public class People{  Car car;  House house;   //聚合关系中作为成员变量的类一般使用set方法赋值  public void setCar(Car car){  This.car = car;  }  public void setHouse(House house){  This.house = house;  }  public void driver(){  <span style="font-family:Arial;"></span><pre name="code" class="csharp">        Console.Write(“车的型号:”+car.getType());  }  public void sleep(){  <pre name="code" class="csharp">        Console.Write(“我在房子里睡觉:”+house.getAddress());  }
}  

4、组合

组合是一种特殊的关联,耦合度比聚合大,代码实现同样,要理解,不同点在于:是组合中的“总体”是不能缺少“部分”。

代码实现是:

<span style="font-size:18px;">    public class Body{Ear ear =new Ear;Eyes eyes =new Eyes;public void listen(){Console.Write("身体须要"+ ear.getname()+"来听");}public void sleep(){Console.Write("睡觉时须要"+ ear.getname()+"闭上");}}</span>

5、继承

继承分为两种一种是继承抽象类。一种是实现接口。两个的差别是:

抽象类表示的是,这个对象是什么。接口表示的是,这个对象能做什么。

第一点. 接口是抽象类的变体,接口中全部的方法都是抽象的。而抽象类是声明方法的存在而不去实现它的类。

第二点. 接口能够多继承,抽象类不行
        第三点. 接口定义方法。不能实现。而抽象类能够实现部分方法。
        第四点. 接口中基本数据类型为static 而抽类象不是的。

6、实现

实现的耦合度和继承是同样的,实现就是一个类去实现一个或多个接口。接口定义方法。类去实现方法,就是这样。

ok,关于继承和实现的代码事实上非常easy。使用了keyword。各种语言的keyword不同。

总结:

关于设计模式,假设不知道UML图中的关系是如何实现的。那么就等于全然处于架空状态。

设计模式须要我们不但要看懂UML图,还要会灵活应用。这是设计模式的基础。

版权声明:本文博客原创文章,博客,未经同意,不得转载。

设计图案之间关系的代码实现相关推荐

  1. 窗口类、窗口类对象与窗口 三者之间关系

    本文摘自孙鑫<VC++深入详解3.3.1> 3.3.1  三者之间关系 很多开发人员都将窗口类.窗口类的对象和窗口之间的关系弄混淆了.为了使读者能更好地理解它们之间的关系,下面我们将模拟C ...

  2. 制作程序化装饰花纹图案_用装饰器设计图案装饰

    制作程序化装饰花纹图案 装饰图案是广泛使用的结构图案之一. 此模式在运行时动态更改对象的功能,而不会影响对象的现有功能. 简而言之,此模式通过包装将附加功能添加到对象. 问题陈述: 想象一个场景,我们 ...

  3. 警告: 检测到依赖关系环:_软件设计:依赖关系

    警告: 检测到依赖关系环: Dependencies in Software Design 软件设计的依存关系 In software development, the idea of depende ...

  4. DDD领域驱动设计实战-分层架构及代码目录结构

    代码结构 DDD并没有给出标准的代码模型,不同的人可能会有不同理解. 按DDD分层架构的分层职责定义,在代码模型里分别为用户接口层.应用层.领域层和基础层,建立了 interfaces.applica ...

  5. 《大象:thinking in uml 》(第二版) 3章 UML核心元素 8-11节 设计类、关系、组件、节点

    3.8 设计类 只供参考,喜欢请支持正版图书 设计类是系统实施中一个或多个对象的抽象:设计类所对应的对象取决于实施语言.设计类用于设计模型中,它直接使用与编程语言相同的语言来描述. 凡是使用过面向对象 ...

  6. 微服务架构与Docker容器之间关系

    微服务j架构与Docker容器之间关系 因公司业务市场的发展与技术架构等结合因素,希望接下来的产品架构能支撑轻量级.高并发.大数据.智能化.易维护.动态扩展等方向发展,因项目性能问题需要处理,公司架构 ...

  7. TLS与SSL之间关系——SSL已经被IEFT组织废弃,你可以简单认为TLS是SSL的加强版

    TLS与SSL之间关系 原文地址:SSL vs. TLS - What's the Difference? from:https://juejin.im/post/5b213a0ae51d4506d4 ...

  8. 类与类之间关系的表示方式

    类与类之间关系的表示方式 关联关系 关联关系是对象之间的一种引用关系, 用于表示一类对象与另一类对象之间的联系,如老师和学生.师傅和徒弟.丈夫和妻子等. 关联关系是类与类之间最常用的一种关系,分为一般 ...

  9. 怎么安装python_零基础入门必看篇:浅析python,PyCharm,Anaconda三者之间关系

    今天为大家带来的内容是:零基础入门必看篇:浅析python ,PyCharm,Anaconda三者之间关系 众所周知,Python是一种跨平台的计算机程序设计语言,简单来说,python就是类似于C, ...

  10. c++类与类之间关系

    类与类之间关系 类与类之间关系 UML表示和代码表示 类与类之间关系 类与类之间的关系对于理解面向对象具有很重要的作用,以前在面试的时候也经常被问到这个问题,在这里我就介绍一下. 类与类之间存在以下关 ...

最新文章

  1. ORACLE分区表删除分区数据
  2. 计算机专业英文简历和求职信,计算机专业生英文求职信范文
  3. angularjs与java_关于angularjs与java结合,获取后台数据并解析的问题
  4. STM32 FSMC学习笔记+补充(LCD的FSMC配置)
  5. 【网络安全】2022年第一次靶场渗透实战学习
  6. iphone 有关(maybe you meant: _kSecClass$non_lazy_ptr)
  7. 视屏接口系列(一 ) ----------VGA(对与数信号显示器要加载A/D,延时拖尾、质量下降)...
  8. 转载:xml文件中的特殊字符
  9. 843. n-皇后问题
  10. Linux之Json20160705
  11. 今日头条10.82亿元拿下 “中国最牛街道”土地:将与腾讯、阿里做邻居
  12. 收拾了一下书架,感觉还是像破烂货市场一样
  13. mysql命令导出表结构和数据_mysql命令导入\导出表结构或数据
  14. PS基础操作之图像处理(一)
  15. 如何从0到1进行电商平台订单系统的搭建?
  16. 微信小程序如何获取token
  17. x86 x64 arm64 安装包的区别
  18. 廉颇老矣?尚能饭否?64岁的Python之父被微软录取!
  19. 【Unity3D】自学之路2.0
  20. 在哪里能学到计算机基础知识,电脑基础知识学习

热门文章

  1. Apache Server Status主机状态查看
  2. MATLAB图像生成函数Plot()总结
  3. OpenCV常用函数(三)
  4. Deskew Technologies Gig Performer 4 Mac(现场调音机架)
  5. Android自定义控件之TextView的展开与折叠
  6. Galera Cluster大坑的解决方案
  7. 第二十一章:变换(十四)
  8. Material Design使用集合
  9. 我国物联网发展如何跳出“窄巷”?
  10. SQLLoader2(导入EXCEL或csv格式的文件)