设计模式04、组合模式 外观模式

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停止运行
硬盘停止工作
内存断电
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值