|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
C#是不行的,比如说美国的航天飞船里就有java开发的程序以上是我的愚见,其实不管那种语言,你学好了,都能找到好的工作,
走到这一步,接上去该思索一下计划计划剩下的部分了——在那里利用类?既然回类到渣滓箱的举措十分不雅观且过于表露,为何不断绝谁人历程,把它埋没到一个类里呢?这就是出名的“假如必需做不雅观的事变,最少应将其当地化到一个类里”划定规矩。看起来就象上面如许:
<br>
如今,只需一种新范例的Trash到场办法,对TrashSorter对象的初始化就必需变化。能够设想,TrashSorter类看起来应当象上面这个模样:
classTrashSorterextendsVector{
voidsort(Trasht){/*...*/}
}
也就是说,TrashSorter是由一系列句柄组成的Vector(系列),而那些句柄指向的又是由Trash句柄组成的Vector;使用addElement(),能够安装新的TrashSorter,以下所示:
TrashSorterts=newTrashSorter();
ts.addElement(newVector());
可是如今,sort()却成为一个成绩。用静态体例编码的办法怎样对付一种新范例到场的现实呢?为办理这个成绩,必需从sort()里将范例信息删除,使其必要做的一切事变就是挪用一个通用办法,用它照顾触及范例处置的一切细节。这固然是对一个静态绑定办法举行形貌的另外一种体例。以是sort()会在序列中复杂地遍历,并为每一个Vector都挪用一个静态绑定办法。因为这个办法的义务是搜集它感乐趣的渣滓片,以是称之为grab(Trash)。布局如今酿成了上面如许:
<br>
个中,TrashSorter必要挪用每一个grab()办法;然后依据以后Vector包容的是甚么范例,会取得一个分歧的了局。也就是说,Vector必需寄望本人包容的范例。办理这个成绩的传统办法是创立一个基本“Trashbin”(渣滓筒)类,并为但愿包容的每一个分歧的范例都承继一个新的衍生类。若Java有一个参数化的范例机制,那就大概是最间接的办法。但关于这类机制应当为我们构建的各个类,我们不该该举行贫苦的手工编码,今后的“察看”体例供应了一种更好的编码体例。
OOP计划一条基础的原则是“为形态的变更利用数据成员,为举动的变更利用多性形”。关于包容Paper(纸张)的Vector,和包容Glass(玻璃)的Vector,人人最入手下手也许会以为分离用于它们的grab()办法一定会发生分歧的举动。但详细怎样却完整取决于范例,而不是其他甚么工具。可将其注释成一种分歧的形态,并且因为Java有一个类可暗示范例(Class),以是可用它判别特定的Tbin要包容甚么范例的Trash。
用于Tbin的构建器请求我们为其传送本人选择的一个Class。如许做可告知Vector它但愿包容的是甚么范例。随后,grab()办法用ClassBinType和RTTI来反省我们传送给它的Trash对象是不是与它但愿搜集的范例符合。
上面列出完全的办理计划。设定为正文的编号(如*1*)便于人人对比程序前面列出的申明。
- //:RecycleB.java
- //Addingmoreobjectstotherecyclingproblem
- packagec16.recycleb;
- importc16.trash.*;
- importjava.util.*;
- //Avectorthatadmitsonlytherighttype:
- classTbinextendsVector{
- ClassbinType;
- Tbin(ClassbinType){
- this.binType=binType;
- }
- booleangrab(Trasht){
- //Comparingclasstypes:
- if(t.getClass().equals(binType)){
- addElement(t);
- returntrue;//Objectgrabbed
- }
- returnfalse;//Objectnotgrabbed
- }
- }
- classTbinListextendsVector{//(*1*)
- booleansort(Trasht){
- Enumeratione=elements();
- while(e.hasMoreElements()){
- Tbinbin=(Tbin)e.nextElement();
- if(bin.grab(t))returntrue;
- }
- returnfalse;//binnotfoundfort
- }
- voidsortBin(Tbinbin){//(*2*)
- Enumeratione=bin.elements();
- while(e.hasMoreElements())
- if(!sort((Trash)e.nextElement()))
- System.out.println("Binnotfound");
- }
- }
- publicclassRecycleB{
- staticTbinbin=newTbin(Trash.class);
- publicstaticvoidmain(String[]args){
- //FilluptheTrashbin:
- ParseTrash.fillBin("Trash.dat",bin);
- TbinListtrashBins=newTbinList();
- trashBins.addElement(
- newTbin(Aluminum.class));
- trashBins.addElement(
- newTbin(Paper.class));
- trashBins.addElement(
- newTbin(Glass.class));
- //addonelinehere:(*3*)
- trashBins.addElement(
- newTbin(Cardboard.class));
- trashBins.sortBin(bin);//(*4*)
- Enumeratione=trashBins.elements();
- while(e.hasMoreElements()){
- Tbinb=(Tbin)e.nextElement();
- Trash.sumValue(b);
- }
- Trash.sumValue(bin);
- }
- }///:~
复制代码
(1)TbinList包容一系列Tbin句柄,以是在查找与我们传送给它的Trash对象符合的情形时,sort()能经由过程Tbin承继。
(2)sortBin()同意我们将一个完全的Tbin传送出来,并且它会在Tbin里遍历,选择出每种Trash,并将其回类到特定的Tbin中。请注重这些代码的通用性:新范例到场时,它自己不必要任何修改。只需新范例到场(或产生其他事务)时大批代码都不必要变更,就标明我们计划的是一个简单扩大的体系。
(3)如今能够体味增加新范例有何等简单了。为撑持增加,只必要修改几行代码。如的确有需要,乃至能够进一步地改善计划,使更多的代码都坚持“流动”。
(4)一个办法挪用使bin的内容回类到对应的、特定范例的渣滓筒里。
因为能用到多少功能就用多少,不能用就不用!总的来说:要简单要性能好,可以不用框架。你说java复杂,就是因为你把java(j2ee)与这些框架混在了一起。 |
|