|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
再说第三点:我并没有提到服务器也要整合,然后是IDE,一个好的IDE能够200%提高开发的速度,就说图形方面:你是经过简单托拽和点击就能实现功能好那。
今朝,面向对象是软件体系建模的支流手艺,利用面向对象手艺建模的次要目标之一是可复用性。为了更好地办理软件复用性和扩大性成绩,计划形式失掉了愈来愈多的存眷与使用。
分离command计划形式和Java言语的反射手艺,本文计划完成了一个可复用的事务处置框架。
在面向对象的体系计划中,有些方面的可复用性常常被疏忽了,用户界面(UserInterface,下文简称UI)及其事务处置就是个中之一。一个完全的UI计划应当包含两部分:UI及其响应的事务处置机制,没有事务处置机制的UI是没有效的,关于事务处置,也应当思索可复用计划。固然看上往有些奇异,可是这类计划是有有用代价的——进步了代码的可复用性、强健性和可保护性。
command计划形式的次要计划头脑是把对某一对象的哀求封装为一个对象,从而把收回命令的义务和实行义务的义务分隔,委派给分歧的对象,哀求的一方不用晓得吸收哀求一方的接口。
这类引进第三方类的做法是计划形式所习用的,引进的第三方类解耦了紧耦合对象。command计划形式中,第三方类解耦了挪用操纵的对象与晓得怎样完成该操纵的对象,进步了软件的可复用性。
JDK1.1及其今后的版本,引进了反射(reflection)手艺。反射是Java中十分凸起的静态特性,使用它能够加载一个运转时才得出名字的class,猎取其完全布局,这统统是经由过程反射API完成的。
//UIDemo1
importjava.awt.*;
importjava.awt.event.*;
importjavax.swing.*;
publicclassUIDemo1implements
ActionListener
{
privateJFrameframe;
privateJButtonbutton;
privateJTextAreaarea;
privateintindex=-1;
privateString[]params;
privateUIDemo1(Stringargs[])
{
params=args;
area=newJTextArea(5,25);
button=newJButton("Clickhere!");
button.addActionListener(this);
frame=newJFrame
(getClass().getName());
frame.addWindowListener
(newReusableWindowAdapter());
Containercont=
frame.getContentPane();
JScrollPanescrollPane
=newJScrollPane(area);
cont.add(scrollPane,BorderLayout.NORTH);
cont.add(button,BorderLayout.SOUTH);
frame.pack();
frame.setVisible(true);
}
publicvoidactionPerformed(ActionEventae)
{
//provideequalitycheck
toseeifsourcewasthe
//buttondefinedabove..
usefulonlyifweregister
//thisActionListener
withmultiplesources
if(ae.getSource().equals(button))
{
index=++index%params.length;
area.setText(params[index]);
}
}
publicstaticvoidmain(Stringargs[])
{
if(args.length>1)
{
UIDemo1one=newUIDemo1(args);
}else
{
usage();
}
}
privatestaticvoidusage()
{
System.err.println
("Youmayexcutethisprogramasbelow:");
System.err.println
("javaUIDemo1params1params2...");
System.exit(-1);
}
}
//UIDemo2
importjava.awt.*;
importjava.awt.event.*;
importjavax.swing.*;
publicclassUIDemo2
{
privateJFrameframe;
privateJButtonbutton;
privateJTextAreaarea;
privateintindex=-1;
privateString[]params;
privateUIDemo2(Stringargs[])
{
params=args;
area=newJTextArea(5,25);
button=newJButton("ClickHere!");
button.addActionListener
(newSemiReusableActionListener(this));
frame=newJFrame(getClass().getName());
frame.addWindowListener
(newReusableWindowAdapter());
Containercont=frame.getContentPane();
JScrollPanescrollPane=newJScrollPane(area);
cont.add(scrollPane,BorderLayout.NORTH);
cont.add(button,BorderLayout.SOUTH);
frame.pack();
frame.setVisible(true);
}
voidsetMessage(Objectsource)
{
if(source.equals(button))
{
index=++index%params.length;
area.setText(params[index]);
}
}
publicstaticvoidmain(Stringargs[])
{
if(args.length>1)
{
UIDemo2two=newUIDemo2(args);
}else{
usage();
}
}
privatestaticvoidusage(){
System.err.println
("Youmayexcutethisprogramasbelow:");
System.err.println
("javaUIDemo2params1params2...");
System.exit(-1);
}
}
//SemiReusableActionListener
importjava.awt.event.*;
publicclassSemiReusableActionListener
implementsActionListener
{
privateUIDemo2demo2;
SemiReusableActionListener
(UIDemo2uiDemo)
{
demo2=uiDemo;
}
publicvoidactionPerformed
(ActionEventae)
{
demo2.setMessage
(ae.getSource());
}
}
//UIDemo3
importjava.awt.*;
importjava.awt.event.*;
importjavax.swing.*;
importjava.lang.reflect.*;
publicclassUIDemo3
{
privateJFrameframe;
privateJButtonbutton1;
privateJTextAreaarea;
privateintindex=-1;
privateString[]params;
privateUIDemo3(Stringargs[])
{
params=args;
area=newJTextArea(5,25);
button1=newJButton
("Clickhere!");
//setuprequiredinformation
touseGenericActionListener
StringmethodName="setMessage";
Class[]paramTypes=
{java.lang.Object.class};
Object[]methodArgs=
{button1};
Classclazz=this.getClass();
try{
Methodmethod=
clazz.getMethod(methodName,paramTypes);
button1.addActionListener(new
ReusableActionListener
(method,this,methodArgs));
}
catch(Exceptione){
System.out.println("Couldnot
findthemethod:
"+methodName+"
NowExiting...");
System.exit(-1);
}
frame=newJFrame
(getClass().getName());
frame.addWindowListener
(newReusableWindowAdapter());
Containercont=
frame.getContentPane();
JScrollPanescrollPane
=newJScrollPane(area);
cont.add(scrollPane,BorderLayout.NORTH);
cont.add(button1,BorderLayout.SOUTH);
frame.pack();
frame.setVisible(true);
}
publicvoidsetMessage(Objectsource)
{
if(source.equals(button1))
{
index=++index%params.length;
area.setText(params[index]);
}
}
publicstaticvoidmain(Stringargs[])
{
if(args.length>1){
UIDemo3three=newUIDemo3(args);
}else{
usage();
}
}
privatestaticvoidusage()
{
System.err.println
("Youmayexcutethisprogramasbelow:");
System.err.println
("javaUIDemo3params1params2...");
System.exit(-1);
}
}
//ReusableWindowAdapter
importjava.awt.*;
importjava.awt.event.*;
publicclassReusableWindowAdapter
extendsWindowAdapter{
publicvoidwindowClosing
(WindowEventwe){
Objectsource=we.getSource();
if(sourceinstanceofFrame)
{
((Frame)source).setVisible(false);
((Frame)source).dispose();
System.exit(0);
}
}
}
因为能用到多少功能就用多少,不能用就不用!总的来说:要简单要性能好,可以不用框架。你说java复杂,就是因为你把java(j2ee)与这些框架混在了一起。 |
|