# -*- coding: UTF-8 -*-
descr = 'Python 设计模式之 抽象工厂'
import random
import abc
class AbstractDog(object):
__metaclass__ = abc.ABCMeta
@abc.abstractmethod
def speak(self): pass
@abc.abstractmethod
def __str__(self): pass
def _set_name_(self, name):
return 'never see this'
def _get_name_(self):
pass
name = property(_get_name_, _set_name_)
class USDog(AbstractDog):
def speak(self):
return 'wowo, my name is %s' % self.name
def _set_name_(self, name):
self._name = 'us dog %s' % name
def _get_name_(self):
return self._name
name = property(_get_name_, _set_name_, doc="name")
def __str__(self):
return 'us dog %s' % self.name
class JPDog(AbstractDog):
def speak(self):
return '汪王, 我的名字是 %s' % self.name
def _set_name_(self, name):
self._name = '日本狗 %s' % name
def _get_name_(self):
return self._name
name = property(_get_name_, _set_name_, doc="名字")
def __str__(self):
return '日本狗%s' % self.name
class AbstractCat(object):
__metaclass__ = abc.ABCMeta
@abc.abstractmethod
def speak(self): pass
@abc.abstractmethod
def __str__(self): pass
def __set_name(self, name):
pass
def __get_name(self):
pass
class JPCat(AbstractDog):
def speak(self):
return '喵喵, 我的名字是 %s' % self.name
def _set_name_(self, name):
self._name = '日本猫 %s' % name
def _get_name_(self):
return self._name
name = property(_get_name_, _set_name_, doc="名字")
def __str__(self):
return '日本猫%s' % self.name
class USCat(AbstractDog):
def speak(self):
return 'miaomiao, my name is %s' % self.name
def _set_name_(self, name):
self._name = 'us cat %s' % name
def _get_name_(self):
return self._name
name = property(_get_name_, _set_name_, doc="name")
def __str__(self):
return 'us cat %s' % self.name
class AbstractFactory(object):
__metaclass__ = abc.ABCMeta
@abc.abstractmethod
def createCat(self): pass
@abc.abstractmethod
def createDog(self): pass
class USFactory(AbstractFactory):
def createCat(self):
cat = USCat()
cat.name = 'Amy'
return cat
def createDog(self):
dog = USDog()
dog.name = 'Jame'
return dog
class JPFactory(AbstractFactory):
def createCat(self):
cat = JPCat()
cat.name = '小葵'
return cat
def createDog(self):
dog = JPDog()
dog.name = '黎明'
return dog
class PetShop(object):
def __init__(self, factory=None):
self.pet_factory = factory
def show_pet(self):
cat = self.pet_factory.createCat()
print(' -*- ' * 10)
print( cat)
print('它的名字是 %s' % cat.name)
print('给客人叫一个 %s' % cat.speak())
print(' -*- ' * 10)
print('\n')
dog = self.pet_factory.createDog()
print(' -*- ' * 10)
print(dog)
print('它的名字是 %s' % dog.name)
print('给客人叫一个 %s' % dog.speak())
print(' -*- ' * 10)
# client 部分
def get_factory():
return random.choice([USFactory,JPFactory])()
if __name__ == '__main__':
pet_shop = PetShop()
for i in range(1):
pet_shop.pet_factory = get_factory()
pet_shop.show_pet()
aa
最新推荐文章于 2018-02-01 18:16:13 发布