UML中的各种关系在代码中的实现

最近准备开始机房收费系统的重构了,但是还没开始就发现自己无从下手。所以,再一次总结一下设计模式,希望从中能找到灵感。

继承关系

        UML图:

UML中的各种关系在代码中的实现_第1张图片

        

代码实现:

        ........   

 //老师的抽象类
    abstractclassTeacher
    {
        protectedstringname;
       
        publicTeacher (string name )
        {
            this.name= name;
        }
 
        abstractpublicvoidTeache();      
    }
 
    //数学老师的抽象类
    classMathTeacher:Teacher
    {
        publicMathTeacher(string name)
            :base(name)
        { }
 
        publicoverridevoidTeache()
        {
            thrownewNotImplementedException();
        }
    }
...........

总结:在继承关系中主要涉及到了,构造函数的调用、抽象方法的重写。

聚合关系

UML图



代码实现:

//备忘录类
        class Memento
        {
            private string state;

            public Memento(string state)
            {
                this.state =state ;
            }
            public string State
            {
                get { return state; }
            }
        }

    //管理者类
    class Caretaker
    {
        private Memento memento;<span style="white-space:pre">		</span>//定义一个Memento类型的参数

        public Memento Memento<span style="white-space:pre">			</span>//定义一个方法,得到或设置Memento的值
        {
            get { return memento; }
            set { memento = value; }
        }
    }

总结:聚合关系就是简单的将Memento类中需要保存的信息交给了Caretaker类(即在Caretaker类中定义一个Memento类型的参数)。

 

组合关系

说明:组合关系是一种耦合度较强的关系。

UML图:

UML中的各种关系在代码中的实现_第2张图片

代码实现:

 //工作经历类
    class WorkExperience:ICloneable 
    {
        private string workDate;
        public string WorkDate
        {
            get { return workDate; }
            set { workDate = value; }
        }

        private string company;
        public string Company
        {
            get { return company; }
            set { company = value; }
        }

        public Object Clone()
        {
            return (Object)this.MemberwiseClone();
        }
    }

    //简历
    class Resume:ICloneable
    {
        private string name;
        private string sex;
        private string age;
        private WorkExperience work;
//***********************************************************
        public Resume (string name)<span style="white-space:pre">			</span>
        {
            this.name = name;
            work = new WorkExperience();<span style="white-space:pre">		</span>//在简历类初始化的时候,也将工作经历类实例化了

        }
//********************************************************
 
 
        private Resume (WorkExperience work)
        {
            this.work = (WorkExperience)work.Clone();
        }
        //设置个人信息

        public void SetPersonalInfo(string sex,string age)
        {
            this.sex = sex;
            this.age = age;
        }
//******************************************************
        //设置个人经历
        public void SetWorkExperience(string workDate,string Company)
        {
            work.WorkDate = workDate;
            work.Company = Company;
            
        }
//********************************************************
        //显示
        public void Display()
        {
            Console.WriteLine("{0}{1}{2}",name ,sex ,age );
            Console.WriteLine("{0}{1}",work.WorkDate ,work.Company);
        }

        public Object Clone()
        {
            //return (object)this.MemberwiseClone();
            Resume obj = new Resume(this.work);
            obj.name = this.name;
            obj.sex = this.sex;

总结:组合关系中体现了较强的耦合关系,上例中通过在简历类中将工作经历类实例化,从而简历了强的拥有关系。然后在在简历类中给工作经历类中的属性赋值。

依赖关系

说明:表明一个类的存在必须以另一个类的存在为条件。


UML图:


代码实现:

   //用户
   public class User
   {
       private string name;
       public User (string name )
       {
           this.name = name;
       }

       public string Name
       {
           get { return name; }
       }
   }

    //网站类
    abstract class Website
    {
        public abstract void Use(User user);
    }

总结:在依赖关系中,网站类中的某一个方法一定是用“用户类”作为参数使用的。所以他们就像动物和空气一样,动物依赖着空气重的氧气生存。


你可能感兴趣的:(UML中的各种关系在代码中的实现)