1青岛理工大学课程实验报告课程名称软件设计与体系结构班级实验日期2015.06.02姓名学号实验成绩实验名称观察者模式实验实验目的及要求(1)熟悉观察者模式的核心思想;(2)掌握观察者模式解决问题的方法。实验环境Win7,VS2010实验内容1.定义内部数据列表(1)内部数据列表提供数据;(2)每个数据列表项对应界面表格中的一行。2.定义界面控件DataGridview3.利用观察者模式实现内部存储的数据列表数据发生变化时,自动更新DataGridview中的内容。算法描述及实验步骤1.新建项目2.依次添加抽象目标类InteriorData,具体目标类ConcreteInteriorData,抽象观察者类IObserver,具体观察者类DataGridview3.依次为4个创建的类和主程序中添加代码4.调试并运行程序调试过程及实验结果总结观察者模式的主要内容其实就是为抽象目标对象创建具体目标类和观察者类,通过在具体目标类中使用foreach语句遍历观察者的集合并调用每个观察者的响应方法来实现在目标类发生变化时所有观察者类的实例一同跟着变化,用于实现多个对象之间联动。InteriorData.cs2附录usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;namespaceObserver{abstractclassInteriorData{protectedstringdataList;protectedListIObserverdata=newListIObserver();publicvoidSetDataList(stringdataList){this.dataList=dataList;}publicstringGetDataList(){returnthis.dataList;}publicvoidInput(IObserverobs){Console.WriteLine(把{0}写入{1}数据表,obs.Name,this.dataList);data.Add(obs);}publicvoidDelete(IObserverobs){Console.WriteLine(把{0}从{1}数据表删除,obs.Name,this.dataList);data.Remove(obs);}publicabstractvoidNotifyObserver(stringname);}}ConcreteInteriorData.csusingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;3namespaceObserver{classConcreteInteriorData:InteriorData{publicConcreteInteriorData(stringdataList){Console.WriteLine({0}数据表创建成功,dataList);Console.WriteLine(--------------------------------);this.dataList=dataList;}publicoverridevoidNotifyObserver(stringname){Console.WriteLine({0}数据表更新通知,表内{1}被修改,this.dataList,name);foreach(objectobsindata){if(!((IObserver)obs).Name.Equals(name)){((IObserver)obs).ViewChange();}}//thrownewNotImplementedException();}}}IObserver.csusingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;namespaceObserver{interfaceIObserver{stringName{get;set;}4voidViewChange();voidDataChange(InteriorDataacc);}}DataGridview.csusingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;namespaceObserver{classDataGridview:IObserver{privatestringname;publicDataGridview(stringname){this.name=name;}publicstringName{get{returnname;}set{name=value;}}publicvoidViewChange(){Console.WriteLine({0}视图发生改变,this.name);}publicvoidDataChange(InteriorDataacc){Console.WriteLine({0}数据发生改变,this.name);acc.NotifyObserver(name);}}}Program.cs5usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;namespaceObserver{classProgram{staticvoidMain(string[]args){InteriorDataacc;acc=newConcreteInteriorData(数据表1);IObserverdata1,data2,data3,data4;data1=newDataGridview(数据1);acc.Input(data1);data2=newDataGridview(数据2);acc.Input(data2);data3=newDataGridview(数据3);acc.Input(data3);data4=newDataGridview(数据4);acc.Input(data4);acc.Delete(data3);data1.DataChange(acc);Console.Read();}}}