标签:style blog http color 使用 for ar 2014 div
抽象工厂模式提供一个接口,用于创建相关或者依赖对象的家族,而不需要明确指定具体类。
抽象工厂允许客户端使用抽象的接口来创建一组相关的产品,而不需要关系实际产出的具体产品是什么。这样一来,客户就可以从具体的产品中被解耦。
和工厂方法主要区别于,抽象工厂内要像像定义中说的一样,‘创建一组相关的产品’。
感觉像是(不知道这样理解对否):简单工厂是一个工厂生产多个产品;工厂方法是拆分成子工厂,分别生产各自产品;抽象工厂整合工厂方法和简单工厂,随着子工厂规模变大,也可以生产多个类似产品。
说明:
一个工资类,两个派生类(国内工资和国外工资);
一个社保类,两个派生类(国内社保和国外社保);
一个工厂类,两个派生类(分别生产国内工资、社保和国外工资、社保)
代码:
1 class ISalary(object): 2 _tax = 0 3 _salary = 0 4 _bonus = 0 5 def __init__(self,salary,bonus,tax): 6 self._bonus=bonus 7 self._salary=salary 8 self._tax=tax 9 10 def GetTax(self): 11 return self._tax 12 def GetBonus(self): 13 return self._bonus 14 def GetSalary(self): 15 return self._salary 16 def CalcuteTax(self): 17 pass 18 19 class ChineseSalary(ISalary): 20 def CalcuteTax(self): 21 return (self.GetSalary()+self.GetBonus()-3500)*self.GetTax() 22 23 class ForeignSalary(ISalary): 24 def CalcuteTax(self): 25 return (self.GetSalary()+self.GetBonus()-4000)*self.GetTax() 26 27 class ISocialSecurity(object): 28 def __init__(self): 29 self._social = 0 30 def getsocial(self): 31 return self._social 32 33 class ChineseSocialSecurity(ISocialSecurity): 34 def __init__(self): 35 self._social = 2000 36 37 class ForeignSocialSecurity(ISocialSecurity): 38 def __init__(self): 39 self._social = 2200 40 41 class IFactory(object): 42 def CreateSalary(self,salary,bonus,tax): 43 return ISalary(salary,bonus,tax) 44 def CreateSocialSecurity(self): 45 return ISocialSecurity() 46 47 class ChineseFactory(IFactory): 48 def CreateSalary(self,salary,bonus,tax): 49 return ChineseSalary(salary,bonus,tax) 50 def CreateSocialSecurity(self): 51 return ChineseSocialSecurity() 52 53 class ForeignFactory(IFactory): 54 def CreateSalary(self,salary,bonus,tax): 55 return ForeignSalary(salary,bonus,tax) 56 def CreateSocialSecurity(self): 57 return ForeignSocialSecurity() 58 59 if __name__==‘__main__‘: 60 chFac = ChineseFactory() 61 salary = chFac.CreateSalary(10000,8000,0.2) 62 social = chFac.CreateSocialSecurity() 63 print ‘chinese tax :‘+ str(salary.CalcuteTax()) 64 print ‘chinese social security:‘+ str(social.getsocial()) 65 66 forFac = ForeignFactory() 67 salary = forFac.CreateSalary(10000,8000,0.2) 68 social = forFac.CreateSocialSecurity() 69 print ‘foreigner tax :‘+ str(salary.CalcuteTax()) 70 print ‘foreigner social security:‘+ str(social.getsocial())
运行结果:
参考来源:
http://www.cnblogs.com/chenssy/p/3679190.html
http://www.cnblogs.com/wuyuegb2312/archive/2013/04/09/3008320.html
http://www.cnblogs.com/Terrylee/archive/2006/07/17/334911.html
标签:style blog http color 使用 for ar 2014 div
原文地址:http://www.cnblogs.com/wang-shuai/p/3930754.html