设计模式学习笔记-建造者模式

一、概述

将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示;

二、模式中的角色

Builder:为创建一个Product对象的各个部件指定抽象接口;

ConcreteBuilder:实现Builder的接口以构造和装配该产品的各个部件;定义并明确它所创建的表示;提供一个检索产品的接口;

Director:构造一个使用Builder接口的对象;

Product:表示被构造的复杂对象,ConcreteBuilder创建该产品的内部表示并定义它的装配过程;包含定义组成部件的类,包括将这些部件装配成最终产品的接口;

三、UML类图

四、代码实现

    /// <summary>
    /// 产品类
    /// </summary>
    public class Product
    {
        List<string> parts = new List<string>();

        public void Add(string part)
        {
            parts.Add(part);
        }

        public void Show()
        {
            Console.WriteLine("\n 产品创建------");
            foreach (var item in parts)
            {
                Console.WriteLine(item);
            }
        }
    }

    /// <summary>
    /// 抽象建造者类
    /// </summary>
    public abstract class Builder
    {
        public abstract void BuilderPart1();

        public abstract void BuilderPart2();

        public abstract Product GetResult();
    }

    /// <summary>
    /// 具体建造者类
    /// </summary>
    public class ConcreteBuilder : Builder
    {
        private Product product = new Product();

        /// <summary>
        /// 部件1
        /// </summary>
        public override void BuilderPart1()
        {
            product.Add("部件1");
        }

        /// <summary>
        /// 部件2
        /// </summary>
        public override void BuilderPart2()
        {
            product.Add("部件2");
        }

        /// <summary>
        /// 输出结果
        /// </summary>
        /// <returns></returns>
        public override Product GetResult()
        {
            return product;
        }
    }

    /// <summary>
    /// 指挥者类
    /// </summary>
    public class Director
    {
        /// <summary>
        /// 用来指挥建造过程
        /// </summary>
        /// <param name="builder"></param>
        public void Construct(Builder builder)
        {
            builder.BuilderPart1();
            builder.BuilderPart2();
        }
    }

            #region 建造者模式
            Director director = new Director();
            Builder builder1 = new ConcreteBuilder();

            director.Construct(builder1);
            Product product1 = builder1.GetResult();
            product1.Show();

            #endregion

5、应用场景

5.1:当创建复杂对象的算法应该独立于该对象的组成部分以及它们的转配方式时;

5.2:当构造过程必须允许被构造的对象有不同的表示时;

参考书籍《设计模式-可复用面向对象软件的基础》

时间: 2024-12-28 14:57:17

设计模式学习笔记-建造者模式的相关文章

设计模式学习04—建造者模式

一.动机与定义 创建对象时,我们知道可以使用工厂方式来创建,使调用者和具体实现解耦,但是有一种情况,当要创建的多个对象之间重复性较大,只有创建步骤.组装顺序或者内部构件不同时,工厂模式就需要进一步的演化了,如我们去KFC,有很多种套餐,比如套餐1(薯条+可乐+汉堡),套餐2(鸡肉卷+薯条+可乐),这个套餐就是我们要获取的复杂对象,那么程序如何创建出这种对象呢. 我们看到套餐的内容很多是一样的,那么我们是不是可以考虑将创建单个食品(如鸡肉卷.可乐等)方法提取出来,使用单独一个类协调这些食品的组合比

设计模式学习笔记--外观模式

好久没写设计模式的blog了,这次重新回来填坑,先找一个最简单但是却最常用的设计模式来学习,外观模式.其实说是一个设计模式,其实我们在实际的编程中无时无刻不在用外观模式,可以说这个设计模式已经渗透到编程的各个方便,可能我们自己没感觉出来罢了. 一.外观模式的定义 先来看一下外观模式的定义: 外观模式(Facade),为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层的接口,这个接口使得这一系列子系统更加容易使用. 简单解释一下,所谓外观模式,就是在我们设计系统的时候,将若干个子系统的功

设计模式学习-建造者模式

1.定义 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示. 2.类图 3.代码示例 1 package com.zhaoyangwoo.builder; 2 3 /** 4 * Created by john on 16/5/7. 5 * 场景类 6 */ 7 public class Builder { 8 9 public static void Main(){ 10 BuilderInterface bi = new ConceptBuilder(); 11 Di

C# 设计模式巩固笔记 - 建造者模式

前言 写给自己-贵在坚持.建造者模式不复杂,但是想个形象的例子好难. 介绍-建造者模式 定义:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示. 实现 建造者模式主要是应对复杂对象,在之前讲的滑板鞋的例子看上去不是很适合,因为它并不复杂.但是我们把一双鞋子拆分一下:鞋底.鞋带.鞋面 等等.原来它也并不简单,下面通过建造者模式来实现一下造鞋子的流程: 首先是建造者类: /// <summary> /// 建造者基类 /// </summary> public

设计模式学习笔记-工厂模式

一.概述 定义一个用于创建对象的接口,让子类决定实例化哪一个类.工厂方法(Factory Method)使一个类的实例化延迟到其子类: 2.模式中的角色 Product(Map):定义工厂方法所创建的对象的接口. ConcreteProduct(BaiduMap.GaodeMap):具体Product,实现Product接口. Creator(IMapFactory):声明工厂方法,该方法返回一个Product类型的对象. ConcreteCreator(BaiduMapFactory.Gaod

设计模式学习笔记-桥接模式

一.概述 将抽象部分与它的实现部分分离,使它们都可以独立地变化. 二.模式中的角色 Abstraction:定义抽象类的接口:维护一个指向Implementor类型对象的指针: RefinedAbstraction:扩充由Abstraction定义的接口: Implementor:定义具体行为,具体特征的应用接口: ConcreteImplementor:实现Implementor. 三.UML类图 四.代码实现 4.1 桥接模式的实现代码 /// <summary> /// 实现 /// &

设计模式学习笔记--策略模式

定义: 策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换.策略模式让算法独立于使用它的客户而独立变化. 我们在使用一些功能时,有时有很多种实现方法,或者多种结果,但是都有同样的使用方法,即调用接口,这就是策略模式. 例子: // 设计模式Demo.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <iostream> #include <string> using namespa

Java-马士兵设计模式学习笔记-命令模式

一.概述 命令模式 二.代码 1.Client.java 1 public class Client { 2 3 public void request(Server server){ 4 server.addCommand(new TextCommand()); 5 server.addCommand(new ImageCommand()); 6 server.doSomething(); 7 } 8 } 2.Server.java 1 public class Server { 2 3 pr

设计模式学习笔记——组合模式

组合模式 组合模式,将对象组合合成树形结构以表示"部分-整体"的层次结构.组合模式使得用户对单个对象和组合对象的使用具有一致性. 代码实现 接口声明Component /** * 接口声明 * @author xukai 2016年3月26日 下午4:58:37 * */ public abstract class Component { protected String name; public Component(String name) { this.name = name; }