(战略管理)实验策略模
式观察者模式和组合模式
实验二策略模式、观察者模式和组合模式
一、实验目的:
(1)学习和掌握策略模式;
(2)学习和掌握观察者模式;
(3)学习和掌握组合模式;
(4)学习和掌握使用这些模式解决实际问题;
二、实验内容
1.请使用策略模式实现下列编程要求:已知几何形状家族有圆形、矩形、椭圆
形、三角形等形状。请用 Java语言定义一个抽象类 MyShape表示形状这样概
念,
MyShape抽象类中提供了计算面积、周长、显示形状信息的抽象方法,然后分
别
定义它的子类 MyCircle(圆形)、MyRectangle(矩形)、MyEllipse(椭圆
形)、
MyTriangle(三角形)等特定几何形状。并绘制这些定义的几何家族的所有形
状。
2.请用观察者模式实现功能:学校发布信息,学生可以订阅,老师可以订阅,
行政人员也可以订阅。提示:定义主题接口,观察者接口,定义 Notice、学
生、老师和行政人员类,定义测试类。其中 Notice类实现主题接口,老师、学
生和行政人员实现观察者接口。思考,如果要求实现学生和老师均可以订阅多
个信息,即除了订阅学校发布信息,也可以订阅所属系发送的信息,请编程实
现。
3.定义一个游戏地图。地图是由每个方块拼合起来。地图上有墙等障碍物,也
有可以通行的基本图元构成。请使用组合模式,绘制一个游戏地图,地图的内
容自行定义,也可以类似图 3形式:
图 3游戏地图
4.已知有一个二维数组数据如图 1所示,请结合策略模式、观察者模式和组合
模式实现一个 MVC结构的应用程序。要求:如果用户移动滑块,可以修改二维
数组的值,并在运行的用户界面中显示出来。其中,饼状图和柱状图中的区域
分布为二位数组每一维的总和。运行结果如图 4和图 5所示。
60 50 90
90 40 30
10 20 70
图 4数据模型
图 5运行结果
三、实验环境
1、PC微机;
2、DOS操作系统或 Windows操作系统;
3、jdk程序集成环境 Eclipse
四、源代码、测试结果及 UML图
一:图
2. 源程序代码:
;
;
;
;
;
//绘制所有图形
@SuppressWarnings("serial")
publicclassDrawShapeextendsJPanel{
privateList<MyShape>shapes;
publicDrawShape(){
shapes=newArrayList<MyShape>();
}
publicvoidaddShape(MyShapeshape){//添加图形
if(shape!=null)(shape);
}
publicvoidpaintComponent(Graphicsg){//依次绘制图形
for(MyShapems:shapes){
(g);
(ms);
}
}
}
、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
、
;
;
//形状家族
publicabstractclassMyShape{
publicabstractfloatarea();
publicabstractfloatperimeter();
publicabstractvoiddraw(Graphicsg);
}
、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
、
;
;
;
//圆形
publicclassMyCircleextendsMyShape{
privatestaticfinalfloatPI=;
privateintradius;//定义圆形半径
privateintx,y;//定义起点(x,y)坐标
publicMyCircle(intx,inty,intradius){//构造函数
super();
=x;
=y;
=radius;
}
@Override
publicfloatarea(){//求面积
//TODO自动生成的方法存根
returnPI*radius*radius;
}
@Override
publicfloatperimeter(){//求周长
//TODO自动生成的方法存根
return2*PI*radius;
}
@Override
publicStringtoString(){
return"MyCircle[radius="+radius+",x坐标="+x+",y坐标="+y+"]"+
"面积="+area()+",周长="+perimeter();
}
@Override
publicvoiddraw(Graphicsg){//绘制图形
//TODO自动生成的方法存根
();
(x,y,2*radius,2*radius);
}
}
、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
、
;
;
;
//矩形
publicclassMyRectangleextendsMyShape{
privateintx,y;//定义起点(x,y)坐标
privateintwidth,height;//定义矩形的宽和高
publicMyRectangle(intx,inty,intwidth,intheight){
super();
=x;
=y;
=width;
=height;
}
@Override
publicfloatarea(){
//TODO自动生成的方法存根
returnwidth*height;
}
@Override
publicfloatperimeter(){
//TODO自动生成的方法存根
return2*(width+height);
}
@Override
publicStringtoString(){
return"MyRectangle[x坐标="+x+",y坐标="+y+",矩形宽="+width
+",矩形高="+height+"]"+"面积="+area()+",周长="+perimeter();
}
@Override
publicvoiddraw(Graphicsg){
//TODO自动生成的方法存根
();
(x,y,width,height);
}
}
、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
、
;
;
;
//椭圆形
publicclassMyEllipseextendsMyShape{
privatestaticfinalfloatPI=;
privateintx,y;//定义起点(x,y)坐标
privateintaLong,bShort;//定义椭圆的长轴和短轴
publicMyEllipse(intx,inty,intaLong,intbShort){
super();
=x;
=y;
=aLong;
=bShort;
}
@Override
publicfloatarea(){
//TODO自动生成的方法存根
}
@Override
publicfloatperimeter(){
//TODO自动生成的方法存根
returnPI*bShort+2*(aLong-bShort);
}
@Override
publicStringtoString(){
return"MyEllipse[x坐标="+x+",y坐标="+y+",长轴="+aLong
+",短轴="+bShort+"]"+"面积="+area()+",周长="+perimeter();
}
@Override
publicvoiddraw(Graphicsg){
//TODO自动生成的方法存根
();
(x,y,aLong,bShort);
}
}
、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
、
;
;
;
//三角形
publicclassMyTriangleextendsMyShape{
privateinta,b,c,n;
privateint[]xPoints;
privateint[]yPoints;
publicMyTriangle(int[]xPoints,int[]yPoints,intn,inta,intb,intc){
super();
=xPoints;
=yPoints;
=n;
=a;=b;=c;
}
@Override
publicfloatarea(){
//TODO自动生成的方法存根
floatp=(a+b+c)/2;
return(float)(p*(p-a)*(p-b)*(p-c));
}
@Override
publicfloatperimeter(){
//TODO自动生成的方法存根
returna+b+c;
}
@Override
publicStringtoString(){
return"MyTriangle[a="+a+",b="+b+",c="+c+"]"+
"面积="+area()+",周长="+perimeter();
}
@Override
publicvoiddraw(Graphicsg){
//TODO自动生成的方法存根
();
(xPoints,yPoints,n);
}
}
、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
、
;
;
//测试程序
publicclassTest{//测试绘制所有形状
/**
*@paramargs
*/
publicstaticvoidmain(String[]args){
//TODO自动生成的方法存根
JFrameframe=newJFrame();
DrawShapeds=newDrawShape();
(newMyCircle(20,20,60));
(newMyRectangle(200,20,120,100));
(newMyEllipse(40,200,150,100));
intxPoints[]={300,240,370};
intyPoints[]={200,280,300};
(newMyTriangle(xPoints,yPoints,3,9,12,15));
().add(ds);
("绘制图形演示");
(500,400);
(true);
(_ON_CLOSE);
}
}
3. 测试结果图:
二:图:
2.源代码:
;
//主题
publicinterfaceSubject{
publicvoidregisterObserver(Observerobserver);
publicvoidremoveObserver(Observerobserver);
publicvoidnotifyAllObservers();
}
、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
、
;
;
;
;
//学校通知
publicclassNoticeimplementsSubject{
privateList<Observer>observers;
privateStringmessage;
publicNotice(){
observers=newArrayList<Observer>();
}
@Override
publicvoidregisterObserver(Observerobserver){
//TODO自动生成的方法存根
if(!(observer))
(observer);
}
@Override
publicvoidremoveObserver(Observerobserver){
//TODO自动生成的方法存根
if((observer))
(observer);
}
@Override
publicvoidnotifyAllObservers(){
//TODO自动生成的方法存根
for(Iterator<Observer>it=();();){
Observero=();
(getMessage());
}
}
publicvoidsetMessage(Stringstr){
=str;
}
publicStringgetMessage(){
returnmessage;
}
}
、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
、
;
;
;
;
//学院通知
publicclassDepartmentNoticeimplementsSubject{
privateList<Observer>observers;
privateStringmessage;
publicDepartmentNotice(){
observers=newArrayList<Observer>();
}
@Override
publicvoidregisterObserver(Observerobserver){
//TODO自动生成的方法存根
(observer);
}
@Override
publicvoidremoveObserver(Observerobserver){
//TODO自动生成的方法存根
(observer);
}
@Override
publicvoidnotifyAllObservers(){
//TODO自动生成的方法存根
for(Iterator<Observer>it=();();){
Observero=();
(getMessage());
}
}
publicvoidsetMessage(Stringstr){
=str;
}
publicStringgetMessage(){
returnmessage;
}
}
、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
、
;
//观察者
publicinterfaceObserver{
publicvoidgetNotice(Stringmessage);
}
、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
、
;
//具体观察者,教师
publicclassTeacherimplementsObserver{
@Override
publicvoidgetNotice(Stringmessage){
//TODO自动生成的方法存根
("教师收到通知:"+message);
}
}
、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
、
;
//具体观察者,学生
publicclassStudentimplementsObserver{
@Override
publicvoidgetNotice(Stringmessage){
//TODO自动生成的方法存根
("学生收到通知:"+message);
}
}
、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
、
;
//具体观察者,行政人员
publicclassAdministratorimplementsObserver{
@Override
publicvoidgetNotice(Stringmessage){
//TODO自动生成的方法存根
("行政人员收到通知:"+message);
}
}
、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
、
;
//测试程序
publicclassTest{
/**
*@paramargs
*/
publicstaticvoidmain(String[]args){
//TODO自动生成的方法存根
Noticenotice=newNotice();
DepartmentNoticedepart=newDepartmentNotice();
Observertea,stu,admin;
tea=newTeacher();
stu=newStudent();
admin=newAdministrator();
(tea);
(stu);
(admin);
(tea);
(stu);
("学校通知:五一全体放假七天。。。。");
("学院通知:这个礼拜周末补课,请各位做好心里准备。。。");
();
();
();
();
(tea);
();
}
}
3.测试结果图:
三:图
2.源代码
;
;
;
;
@SuppressWarnings("serial")
publicabstractclassGameComponentextendsJPanel{
publicabstractvoidpaintComponent(Graphicsg);
publicDimensiongetPreferredSize(){
returnnewDimension(50,50);
}
}
、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
;
;
;
;
;
@SuppressWarnings("serial")
publicclassGrassextendsGameComponent{
privateImageIconicon;
privateImageimage;
publicGrass(){
setBorder(());
icon=newImageIcon("src/images/");
image=();
}
@Override
publicvoidpaintComponent(Graphicsg){
//TODO自动生成的方法存根
(image,0,0,getWidth(),getHeight(),this);
}
}
、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
;
;
;
;
@SuppressWarnings("serial")
publicclassHouseextendsGameComponent{
privateImageIconicon;
privateImageimage;
publicHouse(){
icon=newImageIcon("src/images/");
image=();
}
@Override
publicvoidpaintComponent(Graphicsg){
//TODO自动生成的方法存根
(image,0,0,getWidth(),getHeight(),this);
}
}
、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
;
;
;
;
@SuppressWarnings("serial")
publicclassTreeextendsGameComponent{
privateImageIconicon;
privateImageimage;
publicTree(){
icon=newImageIcon("src/images/");
image=();
}
@Override
publicvoidpaintComponent(Graphicsg){
//TODO自动生成的方法存根
(image,0,0,getWidth(),getHeight(),this);
}
}
、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
;
;
;
;
;
;
@SuppressWarnings("serial")
publicclassWallextendsGameComponent{
privateImageIconicon;
privateImageimage;
publicWall(){
icon=newImageIcon("src/images/");
image=();
}
@Override
publicvoidpaintComponent(Graphicsg){
//TODO自动生成的方法存根
try{
image=(newFile("src/images/"));
(image,0,0,getWidth(),getHeight(),this);
}catch(Exceptione){
();
}
}
}
、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
;
;
;
;
@SuppressWarnings("serial")
publicclassRoadextendsGameComponent{
privateImageIconicon;
privateImageimage;
publicRoad(){
icon=newImageIcon("src/images/");
image=();
}
@Override
publicvoidpaintComponent(Graphicsg){
//TODO自动生成的方法存根
(image,0,0,getWidth(),getHeight(),this);
}
}
、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
;
;
;
;
;
//测试程序
@SuppressWarnings("serial")
publicclassTestextendsJFrame{
privateGridLayoutlayout;
privateint[][]map={
{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},
{1,3,0,0,2,0,0,0,0,0,2,0,0,3,1},
{1,3,0,0,0,1,1,3,1,1,0,0,0,3,1},
{1,0,0,4,0,0,0,0,0,0,0,4,0,0,1},
{1,0,1,0,1,1,1,0,1,1,1,0,1,0,1},
{1,0,1,0,0,3,0,0,0,3,0,0,1,0,1},
{1,0,1,0,0,0,0,0,0,0,0,0,1,0,1},
{1,0,1,0,0,0,0,0,0,0,0,0,1,0,1},
{1,0,0,4,0,0,1,3,1,0,0,4,0,0,1},
{1,0,0,0,1,1,1,3,1,1,1,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,1,0,0,3,3,3,0,0,1,0,0,1},
{1,0,1,0,0,0,0,0,0,0,0,0,1,0,1},
{1,2,0,0,0,4,3,4,3,4,0,0,0,2,1},
{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}
};
publicTest(){
super("游戏地图演示");
Containercontainer=getContentPane();
layout=newGridLayout(15,15);
(layout);//设置 15行*15列的网格布局
Colorc=newColor(60,90,0);
(c);//设置窗口背景颜色
for(inti=0;i<();i++){
for(intj=0;j<();j++){
switch(map[i][j]){
case0:(newRoad());break;
case1:(newWall());break;
case2:(newHouse());break;
case3:(newGrass());;break;
case4:(newTree());break;
}
}
}
setSize(600,600);
setVisible(true);
}
/**
*@paramargs
*/
publicstaticvoidmain(String[]args){
//TODO自动生成的方法存根
Testt=newTest();
(_ON_CLOSE);
}
}
3.测试结果图
四:图
2.源代码
;
publicinterfaceModel{
publicvoidsetData(intindex,intvalue);
publicint[]getData();
publicvoidaddObserver(Viewo);
publicvoidremoveObserver(Viewo);
publicvoidnotifyObservers();
}
、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
;
;
;
;
//数据模型
publicclassDataModelimplementsModel{
privateint[]data;//一维数组
privateList<View>observers;//观察者
publicDataModel(){
observers=newArrayList<View>();
data=newint[9];
for(inti=0;i<;i++){
data[i]=5;
}
}
@Override
publicvoidsetData(intindex,intvalue){
//TODO自动生成的方法存根
[index]=value;
notifyObservers();
}
@Override
publicvoidaddObserver(Viewo){
//TODO自动生成的方法存根
if(o==null)thrownewNullPointerException();
if(!(o))(o);
}
@Override
publicvoidremoveObserver(Viewo){
//TODO自动生成的方法存根
if((o))(o);
}
@Override
publicvoidnotifyObservers(){
//TODO自动生成的方法存根
for(Iterator<View>it=();();){
Viewobserver=();
();
}
}
@Override
publicint[]getData(){
//TODO自动生成的方法存根
returndata;
}
}
、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
;
publicinterfaceView{
publicabstractvoidaddView(Viewv);//添加视图
publicabstractvoidremoveView(Viewv);//删除视图
publicabstractvoidupdate(int[]data);//更新视图
}
、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
;
;
;
;
//表格图
@SuppressWarnings("serial")
publicclassTableViewextendsJPanelimplementsView{
privateint[]data={60,50,90,90,40,30,10,20,70};
privatestaticfinalintstartX=20;
privatestaticfinalintstartY=20;
publicvoidpaintComponent(Graphicsg){
(g);
for(inti=0;i<3;i++){
for(intj=0;j<3;j++){
();
(startX+50*j,startY+50*i,50,50);
(""+data[i*3+j],45+50*j,45+50*i);
}
}
}
@Override
publicvoidaddView(Viewv){
//TODO自动生成的方法存根
("不允许添加视图!");
}
@Override
publicvoidremoveView(Viewv){
//TODO自动生成的方法存根
("不允许操作!");
}
@Override
publicvoidupdate(int[]data){
//TODO自动生成的方法存根
=data;
();//更新视图
}
}
、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
;
;
;
;
//饼状图
publicclassPieViewextendsJPanelimplementsView{
privatestaticfinallongserialVersionUID=168680570258863781L;
privateint[]data={60,50,90,90,40,30,10,20,70};
publicvoidpaintComponent(Graphicsg){
(g);
inttotal=0;
for(inti=0;i<;i++){
total=total+data[i];
}
if(total==0){
();
(20,50,200,200,0,360);
}
else{
intx=(data[0]+data[3]+data[6])*360/total;
inty=(data[1]+data[4]+data[7])*360/total;
();
(20,50,200,200,0,x);
();
(20,50,200,200,x,y);
();
(20,50,200,200,x+y,360-x-y);
}
}
@Override
publicvoidaddView(Viewv){
//TODO自动生成的方法存根
("不允许添加视图!");
}
@Override
publicvoidremoveView(Viewv){
//TODO自动生成的方法存根
("不允许操作!");
}
@Override
publicvoidupdate(int[]data){
//TODO自动生成的方法存根
=data;
();//更新视图
}
}
、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
;
;
;
;
//柱状图
@SuppressWarnings("serial")
publicclassHistogramViewextendsJPanelimplementsView{
privateint[]data={60,50,90,90,40,30,10,20,70};
privatestaticfinalintWIDTH=30;//矩形的宽设为固定的 30
publicvoidpaintComponent(Graphicsg){
(g);
();
(20,20,20,270);
(20,270,220,270);
intheightX=(data[0]+data[3]+data[6]);
intheightY=(data[1]+data[4]+data[7]);
intheightZ=(data[2]+data[5]+data[8]);
(50,270-heightX,WIDTH,heightX);
(110,270-heightY,WIDTH,heightY);
(170,270-heightZ,WIDTH,heightZ);
}
@Override
publicvoidaddView(Viewv){
//TODO自动生成的方法存根
("不允许添加视图!");
}
@Override
publicvoidremoveView(Viewv){
//TODO自动生成的方法存根
("不允许操作!");
}
@Override
publicvoidupdate(int[]data){
//TODO自动生成的方法存根
=data;
();//更新视图
}
}
、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
;
;
;
;
@SuppressWarnings("serial")
publicclassFrameViewextendsJPanelimplementsView{
privateList<View>views;
@SuppressWarnings("unused")
privateint[]data;
publicFrameView(){
views=newArrayList<View>();
setLayout(null);
}
@Override
publicvoidaddView(Viewv){
//TODO自动生成的方法存根
if(v==null)thrownewNullPointerException();
if(!(v)){
(v);
((JPanel)v);
}
}
@Override
publicvoidremoveView(Viewv){
//TODO自动生成的方法存根
if((v))(v);
}
@Override
publicvoidupdate(int[]data){
//TODO自动生成的方法存根
=data;
();
}
}
、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
;
;
;
;
;
//控制器
@SuppressWarnings("serial")
publicclassFrameControllerextendsJPanel{
privatestaticfinalintFPS_MIN=0;
privatestaticfinalintFPS_MAX=100;
privatestaticfinalintFPS_INIT=50;
privateJSlider[]sliders;
privateModelmodel;
publicFrameController(Modelm){
super();
=m;
sliders=newJSlider[9];//控制器,滑块条
int[]data={60,50,90,90,40,30,10,20,70};
for(inti=0;i<;i++){
sliders[i]=newJSlider(,FPS_MIN,FPS_MAX,FPS_INIT);
sliders[i].setMajorTickSpacing(20);
sliders[i].setMinorTickSpacing(4);
sliders[i].setPaintTicks(true);
sliders[i].setPaintLabels(true);
sliders[i].setValue(data[i]);//为滑块设置一个初始值
sliders[i].setName(i+"");
add(sliders[i]);
sliders[i].addChangeListener(newChangeListener(){
@Override
publicvoidstateChanged(ChangeEventarg0){
//TODOAuto-generatedmethodstub
JSliderjs=(JSlider)();//获取当前操作的滑块
intindex=(());//获取当前对象的索引
(index,());//修改模型
}});
}
}
}
、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
;
;
;
;
;
//测试程序
@SuppressWarnings("serial")
publicclassTestextendsJFrame{
privateModelmodel;
privateJPanelpanel1,panel2,panel3;
privateFrameViewframeView;
privateFrameControllerpanel4;
publicTest(){
super("MVC测试");
Containercontainer=getContentPane();
(null);
(0,0,800,600);
model=newDataModel();
frameView=newFrameView();
(0,0,800,300);
panel1=newTableView();
((View)panel1);
();
(20,0,240,300);
panel2=newPieView();
((View)panel2);
();
(280,0,240,300);
panel3=newHistogramView();
((View)panel3);
();
(540,0,240,300);
panel4=newFrameController(model);
(80,320,620,200);
((View)panel1);//添加观察者
((View)panel2);
((View)panel3);
(frameView);
(panel4);
setSize(800,600);
setVisible(true);
(_ON_CLOSE);
}
/**
*@paramargs
*/
publicstaticvoidmain(String[]args){
//TODO自动生成的方法存根
newTest();
}
}
3.测试结果图