|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
最初被命名为Oak,目标设定在家用电器等小型系统的编程语言,来解决诸如电视机、电话、闹钟、烤面包机等家用电器的控制和通讯问题。计划以下是可复用事务处置一文的原代码。今朝,面向对象是软件体系建模的支流手艺,利用面向对象手艺建模的次要目标之一是可复用性。为了更好地办理软件复用性和扩大性成绩,计划形式失掉了愈来愈多的存眷与使用。分离command计划形式和Java言语的反射手艺,本文计划完成了一个可复用的事务处置框架。在面向对象的体系计划中,有些方面的可复用性常常被疏忽了,用户界面(UserInterface,下文简称UI)及其事务处置就是个中之一。一个完全的UI计划应当包含两部分:UI及其响应的事务处置机制,没有事务处置机制的UI是没有效的,关于事务处置,也应当思索可复用计划。固然看上往有些奇异,可是这类计划是有有用代价的DD进步了代码的可复用性、强健性和可保护性。command计划形式的次要计划头脑是把对某一对象的哀求封装为一个对象,从而把收回命令的义务和实行义务的义务分隔,委派给分歧的对象,哀求的一方不用晓得吸收哀求一方的接口。这类引进第三方类的做法是计划形式所习用的,引进的第三方类解耦了紧耦合对象。command计划形式中,第三方类解耦了挪用操纵的对象与晓得怎样完成该操纵的对象,进步了软件的可复用性。JDK1.1及其今后的版本,引进了反射(reflection)手艺。反射是Java中十分凸起的静态特性,使用它能够加载一个运转时才得出名字的class,猎取其完全布局,这统统是经由过程反射API完成的。//UIDemo1
importjava.awt.*;
importjava.awt.event.*;
importjavax.swing.*;publicclassUIDemo1implementsActionListener{
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){
//provideequalitychecktoseeifsourcewasthe
//buttondefinedabove..usefulonlyifweregister
//thisActionListenerwithmultiplesources
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);
}
}//SemiReusableActionListenerimportjava.awt.event.*;publicclassSemiReusableActionListenerimplementsActionListener{
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!");
//setuprequiredinformationtouseGenericActionListener
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("Couldnotfindthemethod:"+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);
}
}
//ReusableWindowAdapterimportjava.awt.*;
importjava.awt.event.*;publicclassReusableWindowAdapterextendsWindowAdapter{
publicvoidwindowClosing(WindowEventwe){
Objectsource=we.getSource();
if(sourceinstanceofFrame){
((Frame)source).setVisible(false);
((Frame)source).dispose();
System.exit(0);
}
}
}
从一个编程语言的普及程度来将,一个好的IDE是至关中要的,而现在的java的IDE虽然已经很好了,但是和.net比起来还是稍微差一些的,这是个客观事实。java要想普及的更好。DE是必须加以改进的。 |
|