美文网首页
结构型设计模式 - 组合模式

结构型设计模式 - 组合模式

作者: 千反田爱瑠爱好者 | 来源:发表于2018-09-09 17:16 被阅读2次
    1. 将对象组合成树形结构以表示“部分-整体”的层次结构,使得用户对单个对象和组合对象的使用具有一致性。
    2. 当想表示对象的部分-整体层次结构、希望用户忽略组合对象与单个对象的不同,用户将统一地使用组合结构中的所有对象。
    class Store(object):            # 店面基类
        def add(self,store):        # 添加店面
            pass
        def remove(self,store): # 删除店面
            pass
        def pay_by_card(self):
            pass
     
    class BranchStore(Store):   # 总店、分店
        def __init__(self,name):
            self.name = name
            self.my_store_list = []
        def pay_by_card(self):
            print("店面[%s]的积分已累加进该会员卡" %self.name)
            for s in self.my_store_list:
                s.pay_by_card()
        def add(self,store):        # 添加店面
            self.my_store_list.append(store)
        def remove(self,store): # 删除店面
            self.my_store_list.remove(store)
     
    class JoinStore(Store):     # 加盟店
        def __init__(self,name):
            self.name = name
        def pay_by_card(self):
            print("店面[%s]的积分已累加进该会员卡" %self.name)
        def add(self,store):
            print("无添加子店权限")
        def remove(self,store):
            print("无删除子店权限")
     
    if __name__ == "__main__":
        store = BranchStore("朝阳总店")
        branch = BranchStore("海滨分店")
        join_branch = JoinStore("昌平加盟1店")
        join_branch2 = JoinStore("昌平加盟2店")
        branch.add(join_branch)
        branch.add(join_branch2)        # 分店添加加盟店
        store.add(branch)           # 总店添加分店
        store.pay_by_card()
        print(store.my_store_list)    # 使用总店对象计算卡积分
    

    在累积所有子店面积分时,不需要关心子店面个数,也不用关心是否叶子节点或组合节点:不管是总店刷卡还是加盟店刷卡,都可以正确有效的计算出活动积分。

    相关文章

      网友评论

          本文标题:结构型设计模式 - 组合模式

          本文链接:https://www.haomeiwen.com/subject/hjrdgftx.html