|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
以前很热炒跨平台,主要是由于硅谷挑战微软霸主地位的热情,但是冷静下来后,跨平台往往不是那么一回事。假设你有个软件,所谓的跨平台,你只需要为第二个平台上重新编译一次就行了,这样很难么?职责链形式使多个工具都无机会处置哀求,从而制止哀求的发送者和吸收者之间的耦合干系.将这些工具连成一条链,并沿着这条链传送该哀求,直到有一个对明处置它为止。职责链形式使多个工具都无机会处置哀求,从而制止哀求的发送者和吸收者之间的耦合干系.将这些工具连成一条链,并沿着这条链传送该哀求,直到有一个对明处置它为止。
职责链形式的了局以下图:
.
Handler:界说一个处置哀求的接口并完成后继链.
ConcreteHandler:处置卖力的哀求并可会见后继者.假如可处置该哀求,则处置之,不然将该哀求转发给后继者.
Client:向链上的详细处置者工具提交哀求.
在这里先用一个复杂的例子盘算所得税来讲明一下职责链形式在使用中的感化
先扼要的说一下盘算所得税的办法:
以成都为例:
盘算金额----------------------应征税额---------个税率
1、2000元/月之内免税;
2、2000元/月以上至2500元/月----不凌驾500元----5%
3、2500元/月以上至4000元/月----500元至2000元----10%
4、4000元/月以上至7000元/月----2000元至5000元----15%
5、7000元/月以上至22000元/月----5000元至20000元----20%
6、22000元/月以上至42000元/月----20000元至40000元----25%
7、42000元/月以上至62000元/月----40000元至60000元----30%
8、62000元/月以上至82000元/月----60000元至80000元----35%
9、82000元/月以上至102000元/月----80000元至100000元----40%
10、102000元/月以上----100000元以上----45%
(人为-2000)*响应人为局限的个税率
当你看到如许的一个盘算体例以后你内心是否是已有了本人的设法了?写一系列的if语句来一条条的判别.但如许的写法固然能够完成今朝的需求,可假如当税率产生了变更你又得拿出你的程序一步一步的修正.假如if语句的条数产生变更的话我们还必需在代码中增加需要的if判别.这关于程序的保护来讲是相称贫苦的.假如我们利用职责链形式的话就能够相称复杂了.
先说说我们的计划头脑.
我们能够接纳职责链完成所得税的盘算,由职责链上的一个工具卖力盘算某一段的所得税.假如切合盘算前提,则盘算;不然由下一个工具盘算.这里我们把中心的代码写出来。
以下为援用的内容:
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Linq;
usingSystem.Text;
namespaceCompTax
{
publicclassCompTax
{
privatedoubleTaxp;
privatedoubleMinincome;
privatestaticdoubleDisc=2000;
privateCompTaxNextCompTax;
publicCompTax(doubleMinincome,doubleTaxp)
{
this.Minincome=Minincome;
this.Taxp=Taxp;
NextCompTax=null;
}
publicdoubleComp(doubleincome)
{
if(income>Minincome&&(NextCompTax==nullincome<NextCompTax.Minincome))
{
return(income-Disc)*Taxp;
}
else
{
returnNextCompTax.Comp(income);
}
}
publicstaticCompTaxGetInstance()
{
CompTax[]cp={
newCompTax(2000,0.05),
newCompTax(2500,0.1),
newCompTax(4000,0.15),
newCompTax(7000,0.2),
newCompTax(22000,0.25),
newCompTax(42000,0.3),
newCompTax(62000,0.35),
newCompTax(82000,0.4),
newCompTax(102000,0.45)
};
CompTaxct=null;
for(inti=0;i<cp.Length-1;i++)
{
if(i==0)
ct=cp;
cp.NextCompTax=cp[i+1];
}
returnct;
}
}
}
然后在页面上往挪用。
以下为援用的内容:
privatevoidbutton1_Click(objectsender,EventArgse)
{
textBox2.Text=CompTax.GetInstance().Comp(double.Parse(textBox1.Text)).ToString();
}
如许我们在GetInstance静态办法中把处置各类的大概毗连了起来.假如第一个工具不克不及满意就用下一个工具来处置.一向直到能各处理为止。
在这里我们能够把cp这个数组从设置文件中读取,如许就完成了静态设置.说到这个我们另有良多中央。
能够用到如许的计划形式.好比我们会员积分功效的时分,当积分到了几就能够做甚么事等等也能够用职责链轻松办理了。
其实Java之所以在曾经独步天下,就是因为他的跨平台、安全性,这两方面,效率可不是Java的强项,反而是他最短的一块挡板,虽然net总是用理论证明比.NET快。 |
|