博客
关于我
设计模式-结构型-组合模式
阅读量:186 次
发布时间:2019-02-28

本文共 1558 字,大约阅读时间需要 5 分钟。

文章目录

组合模式

概述

  • 将对象组合成树形结构以表示“部分和整体”的层次结构,组合模式使得用户对单个对象和组合对象的使用具有一致性

对象

  • 抽象组件(Component)
  • 叶子组件(Leaf)
  • 复合组件(Composite)
  • 客户端(Client)

适用场景

  • 表示对象的“部分与整体”层次结构
  • 希望用户忽略组合对象与单个对象的不同,用户统一的使用组合结构中的所有对象

例子

# 假设存在多个图形,并且可以通过基本图形组合成复合图形from abc import ABCMeta, abstractmethod# 抽象组件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 f"Point({self.x}, {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 f"Line[{self.p1}, {self.p2}]"        def draw(self):        print(str(self))# 复合组件class Picture(Graphic):    def __init__(self, iterable):        self.children = []        for i in iterable:            self.add(i)        def add(self, grophic):        self.children.append(grophic)        def draw(self):        print("---复合图形---")        for i in self.children:            i.draw()        print("---复合图形---")print("-----------pic1-------------------")p1 = Point(2,3)l1 = Line(Point(3,4), Point(6,7))l2 = Line(Point(3,5), Point(6,8))pic1 = Picture([p1, l1, l2])pic1.draw()print("-----------pic2-------------------")p2 = Point(3,3)l3 = Line(Point(4,4), Point(7,7))l4 = Line(Point(5,5), Point(8,8))pic2 = Picture([p2, l3, l4])pic2.draw()print("-----------pic-------------------")pic = Picture([pic1, pic2])pic.draw()

优点

  • 定义了包含基本对象和组合对象的层次结构
  • 简化了客户端代码,客户端可以一致的使用组合对象和单个对象
  • 更容易增加新类型组件

转载地址:http://duec.baihongyu.com/

你可能感兴趣的文章
MySQL数据库必会的增删查改操作(CRUD)
查看>>
MySQL数据库性能分析与调优实践
查看>>
mysql数据库扫盲,你真的知道什么是数据库嘛
查看>>
mysql数据库批量插入数据shell脚本实现
查看>>
MySQL数据库操作
查看>>
MySQL数据库故障排错
查看>>
MySQL数据库无法远程连接的解决办法
查看>>
mysql数据库时间类型datetime、bigint、timestamp的查询效率比较
查看>>
MySQL数据库服务器端核心参数详解和推荐配置(一)
查看>>
mysql数据库死锁的产生原因及解决办法
查看>>
MySQL数据库的事务管理
查看>>
mysql数据库的备份与恢复
查看>>
Mysql数据库的条件查询语句
查看>>
MySQL数据库的高可用
查看>>
Mysql数据库相关各种类型的文件
查看>>
MYSQL数据库简单的状态检查(show processlist)
查看>>
MYSQL数据库简单的状态检查(show status)
查看>>
MySQL数据库系列
查看>>
MYSQL数据库自动本地/异地双备份/MYSQL增量备份
查看>>
mysql数据库表增添字段,删除字段、修改字段的排列等操作,还不快来
查看>>