{"id":2108,"date":"2023-11-10T15:10:41","date_gmt":"2023-11-10T07:10:41","guid":{"rendered":""},"modified":"2023-11-10T15:10:41","modified_gmt":"2023-11-10T07:10:41","slug":"Python\u5efa\u9020\u8005\u6a21\u5f0f","status":"publish","type":"post","link":"https:\/\/bianchenghao6.com\/2108.html","title":{"rendered":"Python\u5efa\u9020\u8005\u6a21\u5f0f"},"content":{"rendered":"


\n <\/head>
\n <\/p>\n

\n

Python\u5efa\u9020\u8005\u6a21\u5f0f<\/h1>\n

Python\u5efa\u9020\u8005\u6a21\u5f0f\u8be6\u7ec6\u64cd\u4f5c\u6559\u7a0b<\/span>\n <\/div>\n

\n Builder Pattern\u662f\u4e00\u79cd\u72ec\u7279\u7684\u8bbe\u8ba1\u6a21\u5f0f\uff0c\u8be5\u6a21\u5f0f\u6709\u52a9\u4e8e\u4f7f\u7528\u7b80\u5355\u5bf9\u8c61\u6784\u5efa\u590d\u6742\u5bf9\u8c61\u5e76\u4f7f\u7528\u7b97\u6cd5\u65b9\u6cd5\u3002\u8be5\u8bbe\u8ba1\u6a21\u5f0f\u5c5e\u4e8e\u521b\u4f5c\u6a21\u5f0f\u7c7b\u522b\u3002\u5728\u6b64\u8bbe\u8ba1\u6a21\u5f0f\u4e2d\uff0c\u6784\u5efa\u5668\u7c7b\u6309\u9010\u6b65\u8fc7\u7a0b\u6784\u5efa\u6700\u7ec8\u5bf9\u8c61\u3002\u6b64\u6784\u5efa\u5668\u72ec\u7acb\u4e8e\u5176\u4ed6\u5bf9\u8c61\u3002\n <\/div>\n

\u5efa\u9020\u8005\u6a21\u5f0f\u7684\u4f18\u70b9<\/h3>\n

\u5b83\u5728\u7c7b\u521b\u5efa\u7684\u6307\u5b9a\u5bf9\u8c61\u7684\u6784\u9020\u548c\u8868\u793a\u4e4b\u95f4\u63d0\u4f9b\u4e86\u6e05\u6670\u7684\u5206\u9694\u548c\u552f\u4e00\u7684\u5c42\u3002<\/span>
\n \u5b83\u53ef\u4ee5\u66f4\u597d\u5730\u63a7\u5236\u6240\u521b\u5efa\u6a21\u5f0f\u7684\u6784\u5efa\u8fc7\u7a0b\u3002<\/span>
\n \u5b83\u63d0\u4f9b\u4e86\u66f4\u6539\u5bf9\u8c61\u5185\u90e8\u8868\u793a\u7684\u5b8c\u7f8e\u65b9\u6848\u3002<\/span> <\/p>\n

\u5982\u4f55\u5b9e\u73b0\u5efa\u9020\u8005\u6a21\u5f0f\uff1f<\/h2>\n
\n \u5728\u672c\u8282\u4e2d\uff0c\u6211\u4eec\u5c06\u5b66\u4e60\u5982\u4f55\u5b9e\u73b0\u6784\u5efa\u5668\u6a21\u5f0f\u3002\n <\/div>\n
\n
 # Filename : example.py<\/span>
# Copyright : 2020 By Bianchenghao6<\/span>
# Author by : bianchenghao6.com<\/span>
# Date : 2020-08-22<\/span>
class <\/span>Director:
    __builder = None
    def <\/span>setBuilder(self, builder):
        self.__builder = builder
    def <\/span>getCar(self):
        car = Car()
        # First goes the body
<\/span>         body = self.__builder.getBody<\/span>()
        car.setBody<\/span>(body)
        # Then engine
<\/span>         engine = self.__builder.getEngine<\/span>()
        car.setEngine<\/span>(engine)
        # and <\/span>four wheels
<\/span>         i = 0
        while <\/span>i < 4:
            wheel = self.__builder.getWheel<\/span>()
            car.attachWheel<\/span>(wheel)
            i += 1
        return <\/span>car
# The whole product
<\/span> class <\/span>Car:
    def <\/span>__init__(self):
        self.__wheels = list<\/span>()
        self.__engine = None
        self.__body = None
    def <\/span>setBody(self, body):
        self.__body = body
    def <\/span>attachWheel(self, wheel):
        self.__wheels.append<\/span>(wheel)
    def <\/span>setEngine(self, engine):
        self.__engine = engine
    def <\/span>specification(self):
        print(\"body: %s\"<\/span> % self.__body.shape)
        print(\"engine horsepower: %d\"<\/span> % self.__engine.horsepower)
        print(\"tire size: %d\"<\/span> % self.__wheels[0].size)
class <\/span>Builder:
    def <\/span>getWheel(self): pass
    def <\/span>getEngine(self): pass
    def <\/span>getBody(self): pass
class <\/span>JeepBuilder(Builder):
    def <\/span>getWheel(self):
        wheel = Wheel()
        wheel.size = 22
        return <\/span>wheel
    def <\/span>getEngine(self):
        engine = Engine()
        engine.horsepower = 400
        return <\/span>engine
    def <\/span>getBody(self):
        body = Body()
        body.shape = \"SUV\"<\/span>
        return <\/span>body
# Car parts
<\/span> class <\/span>Wheel:
    size = None
class <\/span>Engine:
    horsepower = None
class <\/span>Body:
    shape = None
def <\/span>main():
    jeepBuilder = JeepBuilder()
    director = Director()
    # Build Jeep
<\/span>     print(\"Jeep\"<\/span>)
    director.setBuilder<\/span>(jeepBuilder)
    jeep = director.getCar<\/span>()
    jeep.specification<\/span>()
    print(\"\"<\/span>)
if <\/span>__name__ == \"__main__\"<\/span>:
    main()
<\/span><\/code><\/pre>\n<\/p><\/div>\n

\u8f93\u51fa<\/h3>\n
\n \u4e0a\u9762\u7684\u7a0b\u5e8f\u751f\u6210\u4ee5\u4e0b\u8f93\u51fa-\n <\/div>\n
\n
 # Filename : example.py<\/span>
# Copyright : 2020 By Bianchenghao6<\/span>
# Author by : bianchenghao6.com<\/span>
# Date : 2020-08-22<\/span>
Jeep
body: SUV
engine horsepower: 400
tire size: 22
<\/span><\/code><\/pre>\n<\/p><\/div>\n

<\/body>
\n<\/html><\/p>\n","protected":false},"excerpt":{"rendered":"Python\u5efa\u9020\u8005\u6a21\u5f0fzh-cn","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[164],"tags":[],"class_list":["post-2108","post","type-post","status-publish","format-standard","hentry","category-python-sjms"],"_links":{"self":[{"href":"https:\/\/bianchenghao6.com\/wp-json\/wp\/v2\/posts\/2108"}],"collection":[{"href":"https:\/\/bianchenghao6.com\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/bianchenghao6.com\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/bianchenghao6.com\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/bianchenghao6.com\/wp-json\/wp\/v2\/comments?post=2108"}],"version-history":[{"count":0,"href":"https:\/\/bianchenghao6.com\/wp-json\/wp\/v2\/posts\/2108\/revisions"}],"wp:attachment":[{"href":"https:\/\/bianchenghao6.com\/wp-json\/wp\/v2\/media?parent=2108"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/bianchenghao6.com\/wp-json\/wp\/v2\/categories?post=2108"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/bianchenghao6.com\/wp-json\/wp\/v2\/tags?post=2108"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}