summaryrefslogtreecommitdiff
path: root/oop/dp
diff options
context:
space:
mode:
Diffstat (limited to 'oop/dp')
-rw-r--r--oop/dp/Decorator.py59
-rw-r--r--oop/dp/__init__.py0
2 files changed, 59 insertions, 0 deletions
diff --git a/oop/dp/Decorator.py b/oop/dp/Decorator.py
new file mode 100644
index 0000000..390935a
--- /dev/null
+++ b/oop/dp/Decorator.py
@@ -0,0 +1,59 @@
+
+from abc import ABCMeta, abstractmethod
+
+
+class Person(metaclass=ABCMeta):
+ def __init__(self, name):
+ self._name = name
+
+ @abstractmethod
+ def wear(self):
+ print('着装: ')
+
+
+class Engineer(Person):
+
+ def __init__(self, name, skill):
+ super().__init__(name)
+ self._skill = skill
+
+ def wear(self):
+ print(f'我是 {self._name} 工程师, 我会 {self._skill}')
+ super().wear()
+
+
+class ClothingDecorator(Person):
+ def __init__(self, person: Person):
+ self._decoratored = person
+
+ def wear(self):
+ self._decoratored.wear()
+ self.decorate()
+
+ @abstractmethod
+ def decorate(self):
+ pass
+
+
+class CasualPantDecorator(ClothingDecorator):
+ def __init__(self, person: Person):
+ super().__init__(person)
+ def decorate(self):
+ print('一条卡其色裤子')
+
+
+class BeltDecorator(ClothingDecorator):
+ def __init__(self, person: Person):
+ super().__init__(person)
+
+ def decorate(self):
+ print('一条黑色腰带')
+
+if __name__ == '__main__':
+ tony = Engineer('Tony', '算法')
+ pant = CasualPantDecorator(tony)
+ belt = BeltDecorator(pant)
+ belt.wear()
+
+
+
diff --git a/oop/dp/__init__.py b/oop/dp/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/oop/dp/__init__.py