今天來玩玩Decorator
javascript:
cd=console.debug;
function Component(base)
{
this.base=null;
try{
this.base=base;
}catch(e){}
this.name="";
this.value=0;
this.getDes=function(){
var s='';
try{
s+=this.base.getDes();
}catch(e){}
s+=this.name+','
return s;
}
this.cost=function(){
var v=0;
try{
v+=this.base.cost();
}catch(e){}
v+=this.value;
return v;
}
}
/*inherit*/
function Espresso(base)
{
var d=new Component(base);
d.name="Espresso";
d.value=100;
return d;
};
function Mocha(base)
{
var d=new Component(base);
d.name="Mocha";
d.value=10;
return d;
};
function Soy(base)
{
var d=new Component(base);
d.name="Soy";
d.value=50;
return d;
};
(function(){
var e= new Espresso(),
m= new Mocha(e),
a= new Mocha(m),
s= new Soy(a);
cd(s.cost());
cd(s.getDes());
})();
python:
class Component():
base=None
name=''
value=0
def __init__(self,base=None):
try:
self.base=base
except:
pass
def getDes(self):
s=''
try:
s+=self.base.getDes()+','
except:
pass
s+=self.name
return s
def cost(self):
v=0;
try:
v+=self.base.value
except:
pass
return v+self.value
class Espresso(Component):
name='Espresso'
value=2000
pass
class Soy(Component):
name='Soy'
value=20
pass
class Mocha(Component):
name='Mocha'
value=200
pass
def main():
s=Espresso()
s=Mocha(s)
s=Mocha(s)
s=Soy(s)
st=s.getDes()
v=s.cost()
print st
print v
if __name__!='__main__':
main()



