作者 主題: MVC架構-實作多個View的問題  (閱讀 5165 次)

0 會員 與 1 訪客 正在閱讀本文。

fell0206

  • 活潑的大學生
  • ***
  • 文章數: 339
    • 檢視個人資料
MVC架構-實作多個View的問題
« 於: 2010-08-05 14:31 »
各位大大,小弟最近在學MVC的架構,參考了許多的資料,也實作出了1個VIEW對一個Controller對一個Model,的簡單例子,但問題來了,實際在應用時不可能只有一個VIEW,所以我試著在Controller中加入多個VIEW,想了四天終於寫出來了!但小弟覺得怪怪的請大大指點一下,並且可否針對寫法提供一些改善的方法!謝謝~

代碼: [選擇]
//Initial.java
import java.util.*;

public class Initial {

/**
* @param args
*/

public static void main(String[] args) {
// TODO Auto-generated method stub
View v = new View("View");
View2 v2 = new View2("View2");
Model m = new Model();
Controller c = new Controller(m);
c.add(v);
c.add(v2);

v.display();
v2.display();

c.showAryList();
}
}
代碼: [選擇]
//Controller.java
import java.util.*;

public class Controller {

// private Viewable v;
private Model m;
private List aryList;

public Controller(Model m) {
// TODO Auto-generated constructor stub
this.m = m;
aryList = new ArrayList();
}

public void add(Viewable v) {
aryList.add(v);
System.out.println(v.getName() + "已被加入!");
v.addController(this);
}

public void removeView(Viewable v) {
aryList.remove(v);
System.out.println(v.getName() + "已被刪除!");
}

public void sumNumber(Viewable v, int N1, int N2) {
if (aryList.contains(v)) {
((Viewable) this.aryList.get(aryList.indexOf(v))).show(this.m
.caculate(N1, N2));
}
removeView(v);
}

public void substractNumber(Viewable v, int N1, int N2) {
if (aryList.contains(v)) {
((Viewable) this.aryList.get(aryList.indexOf(v))).show(this.m
.substract(N1, N2));
}
}

public void showAryList() {
for (int i = 0; i < aryList.size(); i++) {
System.out.println(aryList.get(i).getClass());
}
}
}
代碼: [選擇]
//Model.java
public class Model {

public Model() {
// TODO 自動產生建構子 Stub
}

public int caculate(int x, int y) {
return x + y;
}

public int substract(int x, int y) {
return x - y;
}

}
代碼: [選擇]
//Viewable.java
public interface Viewable {
// final String name;
public String getName();

public void addController(Controller c);

public void show(int result);
}
代碼: [選擇]
//View.java
import java.util.*;

public class View implements Viewable {

private int no1;
private int no2;
private Controller c;
private String name;

public View(String n) {
// TODO Auto-generated constructor stub
this.name = n;
}

public String getName() {
return this.name;
}

public void addController(Controller c) {
this.c = c;
}

public void display() {
Scanner s = new Scanner(System.in);
System.out.print("No 1:");
no1 = s.nextInt();
System.out.print("No 2:");
no2 = s.nextInt();
c.sumNumber(this, no1, no2);
}

public void show(int result) {
System.out.println(no1 + "+" + no2 + "=" + result);
}
}
代碼: [選擇]
//View2.java
import java.util.Scanner;

public class View2 implements Viewable {
private int no1;
private int no2;
private Controller c;
private String name;

public View2(String n) {
// TODO 自動產生建構子 Stub
this.name = n;
}

public String getName() {
return this.name;
}

public void addController(Controller c) {
this.c = c;
}

public void show(int result) {
// TODO 自動產生方法 Stub
System.out.println(no1 + "-" + no2 + "=" + result);
}

public void display() {
Scanner s = new Scanner(System.in);
System.out.print("No 1:");
no1 = s.nextInt();
System.out.print("No 2:");
no2 = s.nextInt();
c.substractNumber(this, no1, no2);
}

}

fell0206

  • 活潑的大學生
  • ***
  • 文章數: 339
    • 檢視個人資料
MVC架構-實作多個View的問題
« 回覆 #1 於: 2010-08-06 09:20 »
各位大大很抱歉!也許我沒說清楚我想要問的問題,問題如下:
1.我的CODE有符合MVC Pattern嗎?
2.MVC Pattern不是透過C去協調M&V嗎!那如果我今天有多個V,那不就有可能會有多個M&C?
3.MVC Pattern的特色不就是當M有變動的時候,C&V不用修改,但我今天若將C中的caculate method改成如下:
代碼: [選擇]
        public String caculate(int x, int y, int z) {
return x + y + z;
}
如果一來,C&V不就都要做修正了嗎?請各位大大可否解釋一下到底是什麼意思! Thank you~