本人写了一个MVC的模式的东西! (50分)

  • 主题发起人 主题发起人 billy_yuan
  • 开始时间 开始时间
B

billy_yuan

Unregistered / Unconfirmed
GUEST, unregistred user!
import javax.swing.*;
import javax.swing.border.TitledBorder;
import java.util.*;
import java.awt.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.event.ActionEvent;
//数据的核心
class Model
{
ArrayList data = new ArrayList();
ArrayList observer = new ArrayList();
public Model()
{
super();
}
public Model(int[] value, String[] name)
{
for ( int i = 0;
i< value.length;
i++ )
{
addData(value,name);
}
}
public Model(Data[] data)
{
for ( int i = 0;
i< data.length;
i++ )
{
addData(data);
}
}
public void addData(int value, String name)
{
Data data = new Data();
data.value = value;
data.name = name;
this.data.add(data);
}
public void addData(Data data)
{
this.data.add(data);
}
public Data getData(int idx)
{
return (Data)(data.get(idx));
}
public int size()
{
return data.size();
}
// 用来向模型中登记观察者.
//这个非常重要的,是连接MODEL与VIEW的关键。
public void registerObserver(Observer o)
{
observer.add(o);
}
public void removeObserver(Observer o)
{
observer.remove(o);
}
// 当数据改变时,由Controller调用此方法,通知各个Observer,刷新视图.
public void changeModel(Model model)
{
data.clear();
for (int i=0;
i<model.size();
i++ )
{
this.addData(model.getData(i));
}
dataUpdate();
}
private void dataUpdate()
{
for (Iterator i = observer.iterator();
i.hasNext();
)
{
Observer o = (Observer)(i.next());
o.dataUpdate(this);
}
}
}
//表现层,即显示数据的地方!这里的数据显示的有两种,
//View1是通过图形来显示。
//View3是通过图形来显示。
//你也可以通过别的方式来显示。但是你得实现Observer的方法。
class View3 implements Observer
{
public View3(Model model)
{
super() ;
}
public void dataUpdate(Model model)
{
for(int i =0;
i <model.size();i++)
{
System.out.print("View3 的"+ model.getData(i).name+ "已更改为" + model.getData(i).value+ "/n");
}
}
}
class View1 extends JPanel implements Observer
{
Model model;
public View1()
{
}
public View1(Model model)
{
try
{
this.model = model;
jbInit();
}
catch(Exception e)
{
e.printStackTrace();
}
}
private void jbInit() throws Exception
{
this.setBackground(Color.white);
this.setBorder(new TitledBorder(BorderFactory.createLineBorder(Color.black,1),"View1"));
}
public void paintComponent(Graphics g)
{
super.paintComponent(g);
if ( model == null ) return;
int x = 20,y = 50;
int h = g.getFontMetrics().getHeight();
for ( int i=0;
i< model.size();
i++ )
{
Data data = model.getData(i);
g.drawString(data.name,x,y);
y+=h;
g.drawString(String.valueOf(data.value),x,y);
y+=h;
}
}
// 当模型数据发生改变时,会自动调用此方法来刷新图形
public void dataUpdate(Model model)
{
/**@todo: Implement this Observer method*/
this.model = model;
repaint();
}
}
interface Observer
{
public void dataUpdate(Model model);
}
//以下是测试的代码
我把测试的代码去掉了!
本程序可以运行,对此例子有什么看法!请说!
 
你的例子太长了,我花不到3秒看了一下,结果你肯定知道了,没看懂
 
我也想短一点,但是这个模式不是很简单的,所以我也没办法减少点!
 
干什么用的?
有什么用处介绍一下啊
 
后退
顶部