python-建造者模式

说明:

假如要组装一台电脑,将主板,CPU,内存等部件按照某个稳定的步骤组合,基本过程是不变的,而组成电脑的各个部件却可以是不同性能的,不同价位,或者是不同版本的,当组成电脑的时只需要选择不同的组件就可以按照基本相同的过程造出不同配置的电脑。也就是说建造者模式的意图是将一个复杂对象的构建过程与表示分离,它使用相同的构建步骤作用于不同的子对象以构建出不同表现形式的“复杂对象”。

实例:

从订单的角度构建一个快餐点餐系统

class Burger():
    """
    主食类,价格名字
    """
    name=""
    price=0.0
    def getPrice(self):
        return self.price
    def setPrice(self,price):
        self.price=price
    def getName(self):
        return self.name
class cheeseBurger(Burger):
    """
    奶酪汉堡
    """
    def __init__(self):
        self.name="cheese burger"
        self.price=10.0
class spicyChickenBurger(Burger):
    """
    香辣鸡汉堡
    """
    def __init__(self):
        self.name="spicy chicken burger"
        self.price=15.0

class Snack():
    """
    小食类,价格以及名字
    """
    name = ""
    price = 0.0
    type = "SNACK"
    def getPrice(self):
        return self.price
    def setPrice(self, price):
        self.price = price
    def getName(self):
        return self.name
class chips(Snack):
    """
    炸薯条
    """
    def __init__(self):
        self.name = "chips"
        self.price = 6.0
class chickenWings(Snack):
    """
    鸡翅
    """
    def __init__(self):
        self.name = "chicken wings"
        self.price = 12.0

class Beverage():
    """
    饮料
    """
    name = ""
    price = 0.0
    type = "BEVERAGE"
    def getPrice(self):
        return self.price
    def setPrice(self, price):
        self.price = price
    def getName(self):
        return self.name
class coke(Beverage):
    """
    可乐
    """
    def __init__(self):
        self.name = "coke"
        self.price = 4.0
class milk(Beverage):
    """
    牛奶
    """
    def __init__(self):
        self.name = "milk"
        self.price = 5.0

class order():
    """
    订单对象,一个订单中包含一份主食,一份小食,一份饮料
    """
    burger=""
    snack=""
    beverage=""
    def __init__(self,orderBuilder):
        self.burger=orderBuilder.bBurger
        self.snack=orderBuilder.bSnack
        self.beverage=orderBuilder.bBeverage
    def show(self):
        print("Burger:%s"%self.burger.getName())
        print("Snack:%s"%self.snack.getName())
        print("Beverage:%s"%self.beverage.getName())

# 建造者
class orderBuilder():
    """
    orderBuilder就是建造者模式中所谓的“建造者”,
    将订单的建造与表示相分离,以达到解耦的目的。
    在上面订单的构建过程中,如果将order直接通过参数定义好(其构建与表示没有分离),
    同时在多处进行订单生成,此时需要修改订单内容,
    则需要一处处去修改,业务风险也就提高了不少。
    """
    bBurger=""
    bSnack=""
    bBeverage=""
    def addBurger(self,xBurger):
        self.bBurger=xBurger
    def addSnack(self,xSnack):
        self.bSnack=xSnack
    def addBeverage(self,xBeverage):
        self.bBeverage=xBeverage
    def build(self):
        return order(self)

# Director类
class orderDirector():
    """
    在建造者模式中,还可以加一个Director类,用以安排已有模块的构造步骤。
    对于在建造者中有比较严格的顺序要求时,该类会有比较大的用处。
    """
    order_builder=""
    def __init__(self,order_builder):
        self.order_builder=order_builder
    def createOrder(self,burger,snack,beverage):
        self.order_builder.addBurger(burger)
        self.order_builder.addSnack(snack)
        self.order_builder.addBeverage(beverage)
        return self.order_builder.build()

#场景实现
if  __name__=="__main__":
    order_builder=orderBuilder()
    order_builder.addBurger(spicyChickenBurger())
    order_builder.addSnack(chips())
    order_builder.addBeverage(milk())
    order_1=order_builder.build()
    order_1.show()

执行结果:

Burger:spicy chicken burger
Snack:chips
Beverage:milk

优点:

使得产品内部表象可以独立的变化,使得客户不必知道产品内部的组成细节。对构建过程更加精细控制,将构建代码和表示代码分开。

缺点:

难以应对”分步骤构建算法“的需求变动。

适用性:

1、需要生成的产品有复杂的内部结构

2、需要生成的产品对象的属性相互依赖,建造者模式可以强破生成顺序。

参考链接:https://yq.aliyun.com/articles/70416?spm=a2c4e.11155435.0.0.495838daVpgS2g

原文地址:https://www.cnblogs.com/welan/p/9124081.html

时间: 2024-10-17 20:56:04

python-建造者模式的相关文章

Python设计模式——建造者模式

需求,画人物,要求画一个人的头,左手,右手,左脚,右脚和身体,画一个瘦子,一个胖子 不使用设计模式 #encoding=utf-8 __author__ = '[email protected]' if __name__=='__name__': print '画左手' print '画右手' print '画左脚' print '画右脚' print '画胖身体' print '画左手' print '画右手' print '画左脚' print '画右脚' print '画瘦身体' 这样写的

Java设计模式学习笔记,三:建造者模式

建造者模式:实现了构建和装配的解耦,即对象的各个子组件单独构建,再进行装配,从而建造完整对象. 该模式适用于构建较为复杂的对象(多个子组件). 不同的构建者,使用相同的装配者,可以建造不同的对象实例.相同的构建者,不同的装配顺序,也可能建造出不同的对象实例. 举例: 汽车对象,子组件包括引擎.轮子和车体. Audi汽车构建者,负责制造Audi牌各个子组件.BMW汽车构建者,负责制造BMW牌各个子组件.然后将子组件统一送至汽车装配者的生产线中进行组装,最后会建造出Audi牌汽车和BMW汽车. 以下

【2016-10-16】【坚持学习】【Day7】【建造者模式】

建造者模式: 一个复杂的对象由多个分部件组成.一个复杂对象 class Product { private string partA; //定义部件,部件可以是任意类型,包括值类型和引用类型 private string partB; private string partC; public string PartA { get { return partA; } set { partA = value; } } public string PartB { get { return partB;

设计模式那点事读书笔记(3)----建造者模式

建造者模式: 建造者模式是将复杂的对象构造进行分离,使得每个部件完成比较独立的工作.通过抽象类,接口来约束建造的过程. 解决什么问题: 当生成的产品对象内部具有复杂的结构. 当复杂对象需要与表示分离,可能需要创建不同的表示时. 当需要向客户隐藏产品内部结构表现时. UML: 代码结构: 商品的实体: package com.demo.builder.model; /** * 产品实体 */ public class MobilePackage { private float money; pri

java/android 设计模式学习笔记(10)---建造者模式

这篇博客我们来介绍一下建造者模式(Builder Pattern),建造者模式又被称为生成器模式,是创造性模式之一,与工厂方法模式和抽象工厂模式不同,后两者的目的是为了实现多态性,而 Builder 模式的目的则是为了将对象的构建与展示分离.Builder 模式是一步一步创建一个复杂对象的创建型模式,它允许用户在不知道内部构建细节的情况下,可以更精细地控制对象的构造流程.一个复杂的对象有大量的组成部分,比如汽车它有车轮.方向盘.发动机.以及各种各样的小零件,要将这些部件装配成一辆汽车,这个装配过

建造者模式

上一次学习了工厂模式,这一学习了建造者模式,对于建造者来说,抽象出来的建筑流程是确定的,往往建筑一座楼房包括下面的步骤:(1)打桩,建立基础(2)建立框架等.建造者模式的本质和建造楼房是一致的:即流程不变,但每个流程实现的具体细节则是经常变化的.建造者模式的好处就是保证了流程不会变化,流程即不会增加.也不会遗漏或者产生流程次序错误,这是非常重要的. 这次代码构思如下: 接下来是代码展示: Client: using System;using System.Collections.Generic;

小菜学设计模式——建造者模式

背景 不要小看炒菜这件小事上,想要上一道佳肴,那是需要循规蹈矩,步步小心的.我相信你肯定在外面吃过没放盐的快餐,吃过放多了盐的快餐.....既然炒菜是一个如此复杂的过程,又必须循规蹈矩,那为什么不给他一个死规定呢?如果谁没有按照规定做事,就进行对应的提醒警告.这就是建造者模式的由来,限制规则步骤,但是开发规则细节.比如说盛菜之前必须放盐,那么规定一定要放盐,具体放多少自己论情况而定. 1.使用意图 如果你需要将一个复杂对象的构建与它的表示(构建具体过)分离,使得同样的构建过程可以创建不同的表示的

建造者模式(Builder)

定义 (本人在阅读完本书的中英两个版本之后发现对建造者模式十窍懂了九窍,所以直接去网上搜别人的分析了,所以本章大部分是根据网上的资料收集来的,此外,代码例子表示本书的例子不合适,也换了,所以本章和这本书关系不大.) 建造者模式是将一个复杂的对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示.建造者模式最重要的两个角色:抽象建造者(Builder)和指导者(Director),其中建造者知道怎么(How)去建造产品,而指导者知道去制造什么(What)产品,建造者模式用建房子的例子来说明

【设计模式】建造者模式

1.定义 1.1 标准定义 建造者模式( Builder Pattern) 也叫做生成器模式, 其定义如下: Separate the construction of a complex object from its representation so that the same construction process can create different representations.( 将一个复杂对象的构建与它的表示分离, 使得同样的构建过程可以创建不同的表示. ) 1.2  通用

设计模式—建造者模式

1 建造者模式  将一个复杂的对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示. 建造者返回给客户一个完整的产品对象,而客户端无须关心该对象所包含的属性和组建方式,这就是建造者模式的设计动机. 2  模式解析 建造者模式通常包括下面几个角色: 1. builder:给出一个抽象接口,以规范产品对象的各个组成成分的建造.这个接口规定要实现复杂对象的哪些部分的创建,并不涉及具体的对象部件的创建. 2. ConcreteBuilder:实现Builder接口,针对不同的商业逻辑,具体化复