zoukankan      html  css  js  c++  java
  • UML类图

    最近抽时间整理下设计模式。何为设计模式?设计模式的官方定义:代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。个人对设计模式的理解:

    • 设计模式是针对面向对象的(或基于对象的)。(所以我们写的面向过程式的代码,往往感觉无处下手使用设计模式)
    • 对于某一类问题,解决方案的总结

    UML 类图

    UML类图是类与类之间的关系设计图。掌握UML类图,更容易学习设计模式(设计模式就是有效的组织类与类之间的关系)。
    下面展示UML类图中类与类(或接口)之间的6种关系,以及对应到C#中的代码结构。

    泛化关系(generalization)

    语义:类与类的继承关系。继承关系为 is-a的关系;两个对象之间如果可以用 is-a 来表示,就是继承关系。如猫cat是动物animal。

    C#代码体现为继承类

    public class Animal
    {
    }
    public class Cat : Animal
    {
    }
    

    实现关系(realize)

    语义:类之间Can的关系,有“契约”、“能力”或“功能”的意思。如鸭子有游泳的“能力”:

    C#代码体现为继承接口

    public interface ISwim 
    {
    	void Swim();
    }
    
    public class Duck : ISwim
    {
    	public virtual void Swim()
    	{
    		throw new System.NotImplementedException();
    	}
    }
    

    聚合关系(aggregation)

    语义:整体由个体构成。如班级由学生构成(班级为整体,学生为个体)。

    注意菱形箭头方向
    C#代码体现为一个类包含另一个类的集合成员

    public class Student
    {
    }
    public class Class
    {
    	public virtual IEnumerable<Student> Student
    	{
    		get;
    		set;
    	}
    }
    

    组合关系(composition)

    语义:整体由部分构成,强依赖的特殊聚合关系,对整体来说部分必须存在。如汽车离开轮胎就不可正常驾驶,聚合关系的依赖没有那么强,如少一个学生照样可以上课。

    C#代码体现为一个类包含另一个类的集合成员

    public class Tyre
    {
    }
    
    public class Car
    {
    	public virtual IEnumerable<Tyre> Tyre
    	{
    		get;
    		set;
    	}
    }
    

    关联关系(association)

    语义:不同类对象之间的结构关系(一种静态关系,与运动状态无关)

    C#代码体现为:一个类包含另一个类的成员。

    public class Ticket
    {
    }
    
    public class Passenger
    {
    	public virtual Ticket Ticket
    	{
    		get;
    		set;
    	}
    }
    

    依赖关系(dependency)

    语义:一个对象在运行期间会用到另一个对象

    C#代码体现为:一个类中的函数的参数或内部包含另一个类。

    public class Bike
    {
    }
    public class Person
    {
    	public virtual void GoToSubline(Bike bike)
    	{
    		throw new System.NotImplementedException();
    	}
    }
    
    

    结束语

    接下来开始一系列设计模式的总结。关于是否需要学习设计模式可谓众说纷纭,我认为还是必要的,但是千万不要用死。

    1. 面试中经常被问到(这个估计是加分项)
    2. 阅读大牛代码更容易(理清关系一个生动的设计模式名字就能清楚程序结构)
    3. 为自己成为大牛做准备(先对设计模式有个印象,慢慢自己真正掌握了再用)
  • 相关阅读:
    201504051930_《移动APP框架——MUI——HTML5》
    201503121644_《ios直播协议相关》
    2010502260926_《avolon》
    201502251333_《avolon作用域》
    201502251308_《fekit》
    使用Eclipse下载CRaSH源代码
    网络流量监控工具
    Map的putAll方法验证
    bat脚本中%~dp0含义解释
    CD管理和检索软件比较
  • 原文地址:https://www.cnblogs.com/LoveTomato/p/8330494.html
Copyright © 2011-2022 走看看