您的位置:首页 > 编程语言

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

2014-07-28 16:58 302 查看
最近准备开始机房收费系统的重构了,但是还没开始就发现自己无从下手。所以,再一次总结一下设计模式,希望从中能找到灵感。继承关系: UML图: 代码实现: ........
//老师的抽象类
    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图:代码实现:
//工作经历类
    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);    }
总结:在依赖关系中,网站类中的某一个方法一定是用“用户类”作为参数使用的。所以他们就像动物和空气一样,动物依赖着空气重的氧气生存。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: