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

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

继承关系

        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);
    }

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


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 13
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值