网站代发外链,遮罩层怎么做网页,番禺建设网站外包,上海网站建设网页制MVC框架的简介 在与师姐和团队成员沟通之后,我近期对MVC架构有了新的思考,MVC,就是将一个具体的程序或者可以说成是软件,以模型(model),视图(view),控制器(controller)来组织代码,从而实现业务逻辑,数据,界面显示分离. Model#xff08;模型#xff09;是应用程序中用于处理…MVC框架的简介 在与师姐和团队成员沟通之后,我近期对MVC架构有了新的思考,MVC,就是将一个具体的程序或者可以说成是软件,以模型(model),视图(view),控制器(controller)来组织代码,从而实现业务逻辑,数据,界面显示分离. Model模型是应用程序中用于处理应用程序数据逻辑的部分。通常模型对象负责在数据库中存取数据。View视图是应用程序中处理数据显示的部分。通常视图是依据模型数据创建的。
Controller控制器是应用程序中处理用户交互的部分.通 常控制器负责从视图读取数据控制用户输入并向模型发送数据。在此设计框架上实现了分成,分离,在建立比较复杂的应用程序的时候可以在一个时间专门关注一个方面,分离处理. 以数字类,挑选奇偶数为例,在此我也同样考虑运用了简单工厂模式和工厂模式.
在model中,就是数字类,在此实现相应的业务逻辑(奇偶数判断),以及对Controller传来的数据进行处理,并保存在model之中,在此,为了在三者之间可以构成一个环,model之中就有一个UpdateView函数,来通知view更新来显示数据.获取的数据存储在model中. 在Controller中,仅仅是用来传递view传递过来的数据,其中包括数字的集合和view的信息(供之后model来实现调用),在此,其实可以增加很多控制器逻辑.可以对数据进行处理使其得到 的数据能够符合model的需求. 在view中,是提供全部的界面操作,与用户进行联系,从而得到数据,数据可以是用户输入,员可以是网络中获取,并在view中建立相应的可供model的回调机制,可以是一个接口.
view获取数据,与用户交互并在view中调用Controller来传递数据,Controller来处理选择数据,然后传递给Model进行对应的业务处理.从而构成一个闭环.
需要注意的是这里尊重严格的顺序关系,只能由一个箭头的一端传递到 一个端,从而加强封装性,保密性.使调用接口简单化. 下面是改进的JAVA程序 Event.java
package Event;
import NumberModel.NumberX;
public interface Event{public abstract void updateView(NumberX number);
}
NumberX.java
package NumberModel;import java.util.*;
import Event.*;public abstract class NumberX{public abstract List Integer GetNumberList();public abstract boolean GetType();//获得数字类是属于那种类型的数字类返回FALSE是奇数返回TURE是偶数public abstract void clear();//清除数字类链表中的数据public abstract void add(Integer i);public abstract boolean IsThisNumber(Integer i);//用来判断是否是该类型的数public abstract NumberX GetInstace();public abstract void Distinguish(List Integer list,Event event);//由C层调用传递数据给m层处理
}
OddNumber.java
package NumberModel;
import java.util.*;
import Event.*;
import java.lang.Integer;public class OddNumber extends NumberX{private ArrayList Integer OddListnew ArrayListInteger();//建立私有的链表成员private OddNumber oddNumbernew OddNumber();//声明为私有的固态变量来建立单体public OddNumber(){}Overridepublic void Distinguish(List Integer list,Event event){OddList.clear();for(int i0;ilist.size();i){if(IsThisNumber(list.get(i))){OddList.add(list.get(i));}}event.updateView(this);//回调通知V层更新}Overridepublic NumberX GetInstace(){return oddNumber;//通过调用此函数来获取单体的对象}Overridepublic void clear(){OddList.clear();}Overridepublic void add(Integer i){OddList.add(i);}Overridepublic boolean IsThisNumber(Integer i){if(i%20)return false;else return true;}public boolean GetType()//获得数字类是属于那种类型的数字类告诉调用者是奇数{return false;}Overridepublic ListInteger GetNumberList(){return OddList;}
}
EvenNumber.java
package NumberModel;
import java.util.*;
import Event.*;
import java.lang.Integer;public class OddNumber extends NumberX{private ArrayList Integer OddListnew ArrayListInteger();//建立私有的链表成员private OddNumber oddNumbernew OddNumber();//声明为私有的固态变量来建立单体public OddNumber(){}Overridepublic void Distinguish(List Integer list,Event event){OddList.clear();for(int i0;ilist.size();i){if(IsThisNumber(list.get(i))){OddList.add(list.get(i));}}event.updateView(this);//回调通知V层更新}Overridepublic NumberX GetInstace(){return oddNumber;//通过调用此函数来获取单体的对象}Overridepublic void clear(){OddList.clear();}Overridepublic void add(Integer i){OddList.add(i);}Overridepublic boolean IsThisNumber(Integer i){if(i%20)return false;else return true;}public boolean GetType()//获得数字类是属于那种类型的数字类告诉调用者是奇数{return false;}Overridepublic ListInteger GetNumberList(){return OddList;}
}
NumberView.java
package NumberView;
import java.util.*;
import Event.*;
import NumberModel.*;
import NumberController.*;public class NumberView implements Event {//建立视图类public void ShowNumber(NumberX NumberExample){//用来显示挑选数的数字List Integer ListNumberExample.GetNumberList();//List作为声明来访问数列if(NumberExample.GetType()true)System.out.println(the Evens is:);elseSystem.out.println(the odds is:);for(int i0;iList.size();i){System.out.print(List.get(i) );}}public void ShowUi(){int n;List IntegernumberListnew ArrayListInteger();Scanner innew Scanner(System.in);System.out.println(请输入你要输入的数字的个数);nin.nextInt();System.out.println(请分别输入这些数);for(int i0;in; i){numberList.add(in.nextInt());}int type;System.out.println(请输入你要输入你要挑选奇数还是偶数奇数输入0偶数输入1);nin.nextInt();SimpleFactory factorynew SimpleFactory();factory.NumberDistinguish(numberList,n,this);}public void updateView(NumberX number){ShowNumber(number);}
}
NumberController.java
package NumberController;
import java.util.*;
import java.lang.Integer;
import Event.*;
import NumberModel.*;public class NumberController{private NumberX NumberExnull;//NumberEx作为所具有的number类的引用public NumberController(NumberX Nu){//抽象类的构造函数NumberExNu.GetInstace();//构造函数建立数字类的时候赋值}public void NumberDistinguishController(ListInteger list,Event event)//list为V层传递进来的链表类//event传递视图类的信息事件{NumberEx.Distinguish(list,event);}public void ChangeNumber(NumberX NumberDate){//用来改变控制器控制的数字类达到改变NumberExNumberDate.GetInstace();}
}
simpleFactory.java 也是此程序的controller层
package NumberController;import java.util.*;
import Event.*;
import NumberController.*;
import NumberModel.*;public class SimpleFactory{public SimpleFactory(){}public void NumberDistinguish(List Integer L,int type,Event event){//event传递视图类的信息事件NumberController controller;OddNumber OddNumnew OddNumber();EvenNumber EvenNumnew EvenNumber();if(type0)controllernew NumberController(OddNum);elsecontrollernew NumberController(EvenNum);controller.NumberDistinguishController(L,event);}}
simpleFactoryMain.java 用来开始执行程序
import java.io.*;
import java.util.*;
import NumberView.*;
import NumberController.*;
import NumberModel.*;public class simpleFactoryMain{public static void main(String []args){NumberView viewnew NumberView();//建立一个视图类对象view.ShowUi();//引用函数来显示界面与用户互动获取信息
}
}
以下是用C来实现工厂模式
//Event.h#include NumberX.hclass Event{
public:virtual void UpdateView(NumberX* );
};//NumberX.h#include iostream
#include vector#ifndef MAIN_H_
#define MAIN_H_#include Event.hclass NumberX{
public:virtual std::vectorint *GetNumberList()0;virtual bool GetType()0;//获得数字类是属于那种类型的数字类返回0是奇数返回1是偶数virtual std::vectorint*GetNumberVector()0;//得到向量virtual void clear()0;//清楚所有数据virtual void push(int)0;//为数字类总增加数据virtual bool IsThisNumber(int i)0;//判断该数字是否是属于该数字类virtual void Distinguish(std::vectorint list,Event*event)0;
};
class EvenNumber:public NumberX{
public:std::vectorint* GetNumberList();//得到相应的数列的向量bool GetType();//获得数字类是属于那种类型的数字类告诉调用者是偶数std::vectorint*GetNumberVector(){return EvenVector;}void clear(){EvenVector.clear();}//清楚所有数据void push(int i){EvenVector.push_back(i);}bool IsThisNumber(int i);//判断该数字是否是属于该数字类void Distinguish(std::vectorint list,Event*event){EvenVector.clear();for(int i0;ilist.size();i){if(IsThisNumber(list.at(i))){push(list.at(i));}}event-UpdateView(this);//M层的回调来通知V层更新};
private:std::vectorint EvenVector;//作为向量来存储变量
};bool EvenNumber::IsThisNumber(int i){if(i%20)return 1;else return 0;
}std::vectorint *EvenNumber::GetNumberList(){return EvenVector;
}
bool EvenNumber::GetType(){return 1;
}class OddNumber:public NumberX{
public:std::vectorint *GetNumberList();//得到相应的数列的向量bool GetType();//获得数字类是属于那种类型的数字类告诉调用者是偶数std::vectorint*GetNumberVector(){return OddVector;}void clear(){OddVector.clear();}//清楚所有数据void push(int i){OddVector.push_back(i);}bool IsThisNumber(int i){if((i1)%20)return 1;else return 0;}//判断该数字是否是属于该数字类void Distinguish(std::vectorint list,Event *event){OddVector.clear();for(int i0;ilist.size();i){if(IsThisNumber(list.at(i))){push(list.at(i));}}event-UpdateView(this);};
private:std::vectorint OddVector;//作为向量来存储变量
};
std::vectorint *OddNumber::GetNumberList(){return OddVector;
}
bool OddNumber::GetType(){return 0;
}
#endif//Factory.h#ifndef MAIN_H
#define MAIN_H#include iostream
#include vector
#include NumberX.h
#includeNumberView.h
#include Event.h
#include NumberController.hclass Factory{//抽象工厂用来分开处理每个具体的工厂
public:virtual void NumberDistinguish(std::vectorint NumberVector,Event *event)0;//NumberVector作为传递进来的样本
};class EvenFactory:public Factory{
public:void NumberDistinguish(std::vectorint NumberVector,Event *event){EvenNumber evenNumber;NumberController controller(evenNumber);controller.NumberDistinguishController(NumberVector,event);}
private:EvenNumber evenVector;//EvenVector作为新建的偶数向量来存储判断的偶数
};class OddFactory:public Factory{
public:void NumberDistinguish(std::vectorint NumberVector,Event *event){//OddVector作为传递进来的样本OddNumber oddNumber;NumberController controller(oddNumber);controller.NumberDistinguishController(NumberVector,event);}
private:OddNumber oddVector;//OddVector作为新建的偶数向量来存储判断的奇数
};#endif//NumberController.h#ifndef MAIN
#define MAIN#include iostream
#include vector
#includeEvent.h
#include NumberX.h
#include NumberView.hclass NumberController{
private:NumberX *NumberEx;//NumberEx作为所具有的number类
public:NumberController(NumberX *Nu,NumberView vi){//抽象类的构造函数NumberExNu;//构造函数建立数字类的时候赋值}NumberController(NumberX *Nu){//抽象类的构造函数NumberExNu;//构造函数建立数字类的时候赋值}void NumberDistinguishController(vectorintlist,Event *event)//list为V层传递进来的链表类//event传递视图类的信息事件{NumberEx-Distinguish(list,event);}
};
#endif//NumberView.h#ifndef MAIN_H__
#define MAIN_H__#include iostream
#include vector#include NumberX.h
#include Event.husing namespace std;class NumberView:public Event{//建立视图类
public:void ShowNumber(NumberX *NumberExample);//用来显示挑选数的数字void ShowUi();void UpdateView(NumberX*Event);};
void NumberView::UpdateView(NumberX* number){ShowNumber(number);
};
void NumberView::ShowUi(){std::vectorint NumberVector;int n,temp;cout 请输入你要输入的数字的个数endl;cin n;cout 请分别输入这些数endl;for(int i0;in;i){cin temp;NumberVector.push_back(temp);}NumberX *number;EvenFactory evenFactory;OddFactory oddFatory;NumberView view ;numberevenFactory.NumberDistinguish(NumberVector);view.ShowNumber(number);numberoddFatory.NumberDistinguish(NumberVector);view.ShowNumber(number);
}void NumberView::ShowNumber(NumberX *NumberExample){//用来显示挑选数的数字std::vectorint *vNumberExample-GetNumberList();//v作为指针来访问数列if(NumberExample-GetType()1)coutthe Evens is:endl;elsecoutthe odds is:endl;for (std::vectorint::iterator it v-begin() ; it ! v-end(); it)std::cout *it;std::cout \n;
}
void
#endif//main.cpp#include iostream
#include vector#include NumberX.h
#include NumberView.h
#include NumberController.h
#include Factory.husing namespace std;// 4 3 2 5 4int main(){NumberView viewnew View();view.ShowUi();
}