最近准备开始机房收费系统的重构了,但是还没开始就发现自己无从下手。所以,再一次总结一下设计模式,希望从中能找到灵感。
继承关系:
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); }