01、组合模式
--定义:将对象组合成树形结构以表示"部分-整体"的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性
--角色:
--抽象组件(Component)
--叶子组件(Leaf)
--复合组件(Composite)
--客户端(Client)
注:主要特点就是:叶子组件 和 复合组件都有同样的属性和方法,例如:单个组件可以删除、复制、改变形状布局、位置,组合的组件也有类似属性
--适用场景:
--表示对象的"整体-部分"层次结构(特别是结构为递归的)
--希望用户忽略组合对象和单个对象的不同,用户统一的使用组合结构中的所有对象
--优点:
--定义了包含基本对象和组合对象的类层次结构
--简化客户端代码,即客户端可以一致的使用组合对象和单个对象
--更容易增加新类型组件
--代码如下:
from abc import *
class Graphic(metaclass=ABCMeta):
@abstractmethod
def draw(self):
pass
class Point(Graphic):
def __init__(self, x, y):
self.x = x
self.y = y
def __str__(self):
return "点(%s, %s)" % (str(self.x), str(self.y))
def draw(self):
print(str(self))
class Line(Graphic):
def __init__(self, p1, p2):
self.p1 = p1
self.p2 = p2
def __str__(self):
return "线段[%s, %s]" % (str(self.p1), str(self.p2))
def draw(self):
print(str(self))
class Picture(Graphic):
def __init__(self, iterable):
self.children = []
for g in iterable:
self.add(g)
def add(self, graphic):
self.children.append(graphic)
def draw(self):
print("--------复合图形----------")
for g in self.children:
g.draw()
print("--------复合图形----------")
# 由点画线
l = Line(Point(1, 2), Point(4, 5))
l.draw()
# 复杂图形绘制
p1 = Point(1, 2)
l1 = Line(Point(5, 7), Point(4, 1))
l2 = Line(Point(9, 0), Point(2, 5))
pic1 = Picture([p1, l1, l2])
pic1.draw()
p2 = Point(6, 9)
l3 = Line(Point(51, 17), Point(24, 21))
pic2 = Picture([p2, l3])
pic = Picture([pic1, pic2])
pic.draw()
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
线段[点(1, 2), 点(4, 5)]
--------复合图形----------
点(1, 2)
线段[点(5, 7), 点(4, 1)]
线段[点(9, 0), 点(2, 5)]
--------复合图形----------
--------复合图形----------
--------复合图形----------
点(1, 2)
线段[点(5, 7), 点(4, 1)]
线段[点(9, 0), 点(2, 5)]
--------复合图形----------
--------复合图形----------
点(6, 9)
线段[点(51, 17), 点(24, 21)]
--------复合图形----------
--------复合图形----------
02、外观模式
--定义:为子系统中一组结构提供一个一致的界面,外观模式提供了一个高级接口,这个接口使得这一子系统更加容易使用
--角色:
--外观(facade)
--子系统类(subsystem classes)
--代码:
class CPU:
def run(self):
print("CPU开始运行")
def stop(self):
print("CPU停止运行")
class Disk:
def run(self):
print("硬盘开始工作")
def stop(self):
print("硬盘停止工作")
class Memory:
def run(self):
print("内存通电")
def stop(self):
print("内存断电")
class Computer:
def __init__(self):
self.cpu = CPU()
self.disk = Disk()
self.memory = Memory()
def run(self):
self.cpu.run()
self.disk.run()
self.memory.run()
def stop(self):
self.cpu.stop()
self.disk.stop()
self.memory.stop()
computer = Computer()
computer.run()
computer.stop()
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
CPU开始运行
硬盘开始工作
内存通电
CPU停止运行
硬盘停止工作
内存断电