#-*-coding:utf-8-*-
'''
意图:将抽象部分与它的实现部分分离,使它们都可以独立地变化,适用于客户要求不断地变化
1,将原抽象部分中实现部分写到一个类中
2,原抽象部分有一个指向实现部分的接口
'''
from abc import ABCMeta
class Abstraction(): #抽象部分
__metaclass__ = ABCMeta
def __init__(self):
pass
def operation(self):
pass
class RefinedAbstraction(Abstraction):
def __init__(self, imp):
self._imp = imp
def operation(self):
self._imp.operation()
class AbstractionImp(): #实现部分
__metaclass__ = ABCMeta
def __init__(self):
pass
def operation(self):
print 'AbstractionImp...imp...'
class ConcreteAbstractionA(AbstractionImp):
def operation(self):
print 'ConcreteAbstractionImpA...'
class ConcreteAbstractionB(AbstractionImp):
def operation(self):
print 'ConcreteAbstractionImpB...'
if __name__ == "__main__":
impA = ConcreteAbstractionA()
absA = RefinedAbstraction(impA)
absA.operation()
impB = ConcreteAbstractionB()
absB = RefinedAbstraction(impB)
absB.operation()
'''
意图:将抽象部分与它的实现部分分离,使它们都可以独立地变化,适用于客户要求不断地变化
1,将原抽象部分中实现部分写到一个类中
2,原抽象部分有一个指向实现部分的接口
'''
from abc import ABCMeta
class Abstraction(): #抽象部分
__metaclass__ = ABCMeta
def __init__(self):
pass
def operation(self):
pass
class RefinedAbstraction(Abstraction):
def __init__(self, imp):
self._imp = imp
def operation(self):
self._imp.operation()
class AbstractionImp(): #实现部分
__metaclass__ = ABCMeta
def __init__(self):
pass
def operation(self):
print 'AbstractionImp...imp...'
class ConcreteAbstractionA(AbstractionImp):
def operation(self):
print 'ConcreteAbstractionImpA...'
class ConcreteAbstractionB(AbstractionImp):
def operation(self):
print 'ConcreteAbstractionImpB...'
if __name__ == "__main__":
impA = ConcreteAbstractionA()
absA = RefinedAbstraction(impA)
absA.operation()
impB = ConcreteAbstractionB()
absB = RefinedAbstraction(impB)
absB.operation()