zoukankan      html  css  js  c++  java
  • 设计模式之构建模式

    from abc import ABCMeta, abstractmethod
    
    
    
    # 产品
    # 构建者
    # 指挥者
    class Toy(metaclass=ABCMeta):
        """玩具"""
        def __init__(self, name):
            self._name = name
            self.__components = []
    
        def getName(self):
            return self._name
    
        def addComponent(self, component, count=1, unit=''):
            self.__components.append([component, count, unit])
    
        @abstractmethod
        def feature(self):
            pass
    
    
    class Car(Toy):
        """小车"""
        def feature(self):
            print("我是%s, 我可以快速奔跑······" % self._name)
    
    
    class Manor(Toy):
        """庄园"""
        def feature(self):
            print("我是%s, 我可供观赏,也可用来游玩!" % self._name)
    
    
    class ToyBuilder(metaclass=ABCMeta):
        """玩具构建者"""
        @abstractmethod
        def buildProduct(self):
            pass
    
    class CarBuilder(ToyBuilder):
        def buildProduct(self):
            car = Car("迷你小车")
            car.addComponent("轮子", 4)
            car.addComponent("车身", 1)
            car.addComponent("发动机", 1)
            car.addComponent("方向盘")
            return car
    
    class ManorBuilder(ToyBuilder):
        def buildProduct(self):
            manor = Manor("淘淘庄园")
            print("正在构建%s······" % manor.getName())
            return manor
    
    
    class BuilderManager:
        """建构类的管理类"""
        def __init__(self):
            self.__carBuilder = CarBuilder()
            self.__manorBuilder = ManorBuilder()
    
        def buildCar(self, num):
            count = 0
            products = []
            while(count < num):
                car = self.__carBuilder.buildProduct()
                products.append(car)
                count += 1
                print("建造完成第%d辆%s" %(count, car.getName()))
            return products
    
        def buildManor(self, num):
            count = 0
            products = []
            while(count < num):
                manor = self.__manorBuilder.buildProduct()
                products.append(manor)
                count += 1
                print("建造完成第%d辆%s" %(count, manor.getName()))
            return products
    
    
    if __name__ == "__main__":
        buildermgr = BuilderManager()
        buildermgr.buildManor(2)
        print()
        buildermgr.buildCar(4)
    
        
  • 相关阅读:
    dljd_(004_005)_jdbc编程步骤
    dljd_003_jdbc编程_概述
    dljd_002_通过接口降低代码的耦合度(2)
    dljd_001_通过接口降低代码的耦合度(1)
    dljd_(002-003)_什么是持久化
    dljd_001_由hibernate名称引出的相关知识
    001_学习26个英文字母
    06_dljd_mysql数据库常用操作
    05_dljd_mysql数据库表的介绍
    【数据结构】树状数组(简单名次树)
  • 原文地址:https://www.cnblogs.com/loveprogramme/p/13047352.html
Copyright © 2011-2022 走看看