dz论坛做分类网站/企业网站建设方案策划
01、组合模式
--定义:将对象组合成树形结构以表示"部分-整体"的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性
--角色:--抽象组件(Component)--叶子组件(Leaf)--复合组件(Composite)--客户端(Client)
注:主要特点就是:叶子组件 和 复合组件都有同样的属性和方法,例如:单个组件可以删除、复制、改变形状布局、位置,组合的组件也有类似属性
--适用场景:--表示对象的"整体-部分"层次结构(特别是结构为递归的)--希望用户忽略组合对象和单个对象的不同,用户统一的使用组合结构中的所有对象
--优点:--定义了包含基本对象和组合对象的类层次结构--简化客户端代码,即客户端可以一致的使用组合对象和单个对象--更容易增加新类型组件--代码如下:
from abc import *class Graphic(metaclass=ABCMeta):@abstractmethoddef draw(self):passclass Point(Graphic):def __init__(self, x, y):self.x = xself.y = ydef __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 = p1self.p2 = p2def __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停止运行
硬盘停止工作
内存断电