设计模式准备篇
来源:互联网 发布:看不见的客人影评知乎 编辑:程序博客网 时间:2024/05/21 17:07
原文链接:http://www.cnblogs.com/wangjq/archive/2012/07/05/2573258.html
2.1 面向对象基本知识
设计模式是面向对象编程的设计指导,因此学习设计模式前先要理解什么是面向对象,这里只简单列出了面向对象的主要概念,要是初学者的话还得查阅相关资料;对已经了解的老手来说,权当复习和梳理一下吧。
2.1.1 面向对象三大特征:封装、继承、多态
2.1.2 类与实例
2.1.3 构造(析构)方法
2.1.4 重载
2.1.5 访问修饰符
2.1.6 属性/字段/方法
2.1.7 抽象类
2.1.8 接口
2.2 UML类图
在学习设计模式时,通常接触到的只有类图,因此读懂UML类图对理解模式来说有很大帮助。下面来介绍UML类图中的关系
2.2.1 依赖关系(Dependency),用虚线加箭头表示。如上图动物(Animal)依赖空气(Air)。表示依赖关系的代码有以下几种
1)作为参数
public class Air { public void GetOxygen() { Console.WriteLine("Get oxygen from air."); } } public abstract class Animal { /// <summary> /// 动物依赖空气才能呼吸,作为参数传入 /// </summary> /// <param name="air"></param> public void Breathe(Air air) { air.GetOxygen(); } }
2)在方法内部定义
/// <summary> /// 动物依赖空气才能呼吸,在方法内部实例化新对象 /// </summary> public void Breathe() { Air air = new Air(); air.GetOxygen(); }
3)静态方法调用
/// <summary> /// 在方法中调用静态方法 /// </summary> public void Test() { ClassName.UseStaticMethode(); }
2.2.2 继承关系(Inherit),用实线加空心箭头表示,如上图鹰(Eagle)继承自动物(Animal)
/// <summary> /// 鹰继承自Animal /// </summary> public class Eagle : Animal { }
2.2.3 实现关系(Realize),用虚线加空心箭头表示,如上图鹰(Eagle)实现了飞行能力(IFlyAble)
/// <summary> /// 鹰继承自Animal /// </summary> public class Eagle : Animal, IFlyAble { //实现IFlyAble接口中定义的方法 public void Fly() { Console.WriteLine("老鹰可以飞翔。"); } }
2.2.4 组合关系,讲组合关系之前不得不谈关联关系与聚合关系
1)关联关系(Association):对于两个相对独立的对象,当一个对象实例与另一个对象的一些特定实例存在固定的对应关系时,这两个对象之间的关系为关联关系。例如:公司与员工的关系
代码表现,通过实例字段或属性来实现
public class Emplolyee { public string Name{ get; set; } } public class Company { /// <summary> /// 一个公司可以有多个员工 /// </summary> private Emplolyee[] employees; }
2) 聚合关系(Aggregate): 是关联关系的一种,是一种较强的关联关系,强调整体与部分之间的关系。例如:电脑与显示器的关系,就是整体与部分的关系,即聚合关系
代码表现,也是通过实例字段或属性来实现
public class Displayer { /// <summary> /// 显示器型号 /// </summary> public string Model { get; set; } } public class Computer { /// <summary> /// 通过字段表示聚合关系 /// </summary> private Displayer displayer; }
3)组合关系,组合关系是聚合的一种特殊形式,表示一个所有物实例不能同时被两个所有物所拥有。如上例:鹰拥有一对翅膀,它的翅膀不能同时属于别的鹰。
代码表现,也是通过实例字段或属性来实现
public class Wing { } /// <summary> /// 鹰继承自Animal /// </summary> public class Eagle : Animal, IFlyAble { private Wing leftWing; private Wing rightWing; public Eagle() { // 在构造函数中实例化翅膀,防止翅膀被改变 leftWing = new Wing(); rightWing = new Wing(); } public void Fly() { Console.WriteLine("老鹰可以飞翔。"); } }
关联关系与聚合关系的区别: 关联关系所涉及的两个对象是处在同一个层次上的,比如程序员和计算机的关系就是一种关联关系,而不是聚合关系,因为程序员不是由计算机组成的。聚合关系涉及的两个对象处于不平等的层次上,一个代表整体,一个代表部分。如计算机与显示器的关系就是聚集关系,因为显示器是计算机的一部分。
聚合关系与组合关系的区别:聚合关系中处于被持有的对象,可以被别的对象所持有。如多态计算机可以共享同一个显示器。组合关系中被持有的对象只能被一个对象引用,不能共享给其它对象;而且被持有的对象的生命周期也由所有者控制,当所有者析构了,其所有物必须随着它一起析构。
- 设计模式准备篇
- 设计模式学习笔记-准备篇
- js设计模式准备之继承篇
- 设计模式学前准备
- 设计模式准备
- 面试准备---java设计模式
- 准备开始写设计模式了
- 菜鸟学设计模式之一思想准备
- 设计模式准备之博客结构说明
- 多线程设计模式——准备知识
- 设计模式 之 准备开始之前
- struts2源码研究之设计模式准备
- JAVA设计模式是个什么玩意儿_00_工厂模式家族准备篇_简单工厂模式
- 设计准备
- 设计模式笔记之6原则--为“变化”做好准备
- 设计模式 之 准备开始之前(转载23种经典的jdk中设计模式)
- 设计模式连载:第四篇还有七分钟,远古巨龙即将复活,请勇士们做好准备
- 准备攻克“分析模式”
- cnpm全局安装
- 进程调度算法
- Android多渠道打包汇总(六)—— 美团的多渠道打包方式
- Analysis Gym
- Python脚本实现树莓派读取mpu9250传感器数据
- 设计模式准备篇
- 工作后,你悟出什么职场道理?
- 24.Redis集群安装使用
- 欢迎使用CSDN-markdown编辑器
- Spring Autowired(required = false) 说明
- 【总结】微信小程序
- 强大的矩阵奇异值分解(SVD)及其应用
- 手机端页面制作
- 莱茵棋牌架设所需要工具和软件