c#设计模式——简单说(建造者模式)

与其说是建造者模式,还不如通俗的说工厂生产模式。当然只是为了自己的理解和应用模式

1、我们需要的是生成需要的组件  A,B……

2、生产流水线通过产品的QA,通过QA的产品就是一个完成的产品,一个可以展示的产品。

3、产品工程师,他给你生产制造的工艺文档,告诉你怎么去完成这个产品的组装

4、出来的产品了。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace 建造者模式
{

    //生成的产品的车间
    public class Product
    {
        private IList<string> parts = new List<string>();
        //按顺序添加组件
        public void Add(string part)
        {
            parts.Add(part);
        }
        //安装组件
        public void Show()
        {
            Console.WriteLine("产品开始在组装……");
            foreach (var item in parts)
            {
                Console.WriteLine("组件" + item + "已装好");
            }
            Console.WriteLine("产品完成。");
        }
    }
    //产品工程师
    public class Builder
    {
        private Product product = new Product();
        //A模块组装
        public void BuildPartA()
        {
            product.Add("手机主板+配件");
        }
        //B模块组装
        public void BuildPartB()
        {
            product.Add("手机外壳");
        }
        //获得的产品
        public Product GeProduct()
        {
            return product;
        }
        //组装成产品
        public void Construct()
        {
            BuildPartA();
            BuildPartB();
            product.Add("打包成盒");
        }
    }

    class Program
    {
        private static Builder builder;
        static void Main(string[] args)
        {
            builder = new Builder();
            builder.Construct();
            Product product = builder.GeProduct();
            product.Show();

            Console.Read();
        }
    }
}

看到这张图,是不是发现少了些东西。没错,少了标准流程的东西

改进下

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace 建造者模式
{

    //生成的产品的车间
    public class Product
    {
        private IList<string> parts = new List<string>();
        //按顺序添加组件
        public void Add(string part)
        {
            parts.Add(part);
        }
        //安装组件
        public void Show()
        {
            Console.WriteLine("产品开始在组装……");
            foreach (var item in parts)
            {
                Console.WriteLine("组件" + item + "已装好");
            }
            Console.WriteLine("产品完成。");
        }
    }
    //产品工程师
    public class Builder : PhoneBuilder
    {
        private Product product = new Product();
        //A模块组装
        public void BuildPartA()
        {
            product.Add("手机主板+配件");
        }
        //B模块组装
        public void BuildPartB()
        {
            product.Add("手机外壳");
        }
        //获得的产品
        public Product GeProduct()
        {
            return product;
        }
        //组装成产品
        public void Construct()
        {
            BuildPartA();
            BuildPartB();
            product.Add("打包成盒");
        }
    }

    //生成手机要的流程,不能偷工减料
    public abstract class PhoneBuilder
    {
        public abstract void BuildPartA();
        public abstract void BuildPartB();
        public abstract void GeProduct();
        public abstract void Construct();
    }

    class Program
    {
        private static Builder builder;
        static void Main(string[] args)
        {
            builder = new Builder();
            builder.Construct();
            Product product = builder.GeProduct();
            product.Show();

            Console.Read();
        }
    }

}
时间: 2024-10-15 17:45:44

c#设计模式——简单说(建造者模式)的相关文章

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

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

设计模式之禅——建造者模式

建造者模式定义: 建造者模式也叫做生成器模式--将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示.) 例子:我们要生产一个简单车模(汽车模型),汽车模型要有启动.停止.引擎发出声音.喇叭响等功能.现在我要让用户根据自己的喜好来选择这些功能的顺序~(接着上一篇模板方法模式的例子) 我们做出了下面的设计,见UML图 见代码 //汽车模型的抽象类 public abstract class CarModel{ //sequence就是客户要求执行的方法的顺序 private A

Android设计模式--建造者模式

回头看自己写的东西,在关于Android自定义控件时,写的代码适用性比较高,但是看上去没有什么技术含量,所以在学习设计模式的时候,想想有些东西是否能够改进,比如说: 自定义Dialog是Android应用必须的,系统的控件实在是太难看了: 在构建中,完全是,new完对象之后,需要什么构建什么,这样写没有问题,可读性也还行,就是看上去不咋的. 以下是小部分代码片段: package com.example.demo.Builder; /** * * @author qubian * @data 2

Java设计模式百例 - 建造者模式

本文源码见:https://github.com/get-set/get-designpatterns/tree/master/builder 建造者模式(Builder Pattern)使用多个简单的对象一步一步构建成一个复杂的对象,这种类型的设计模式属于创建型模式.建造模式可以将一个复杂对象的内部组成部分,与该对象本身的创建分离开来,从而使得复杂对象的组装更灵活. 文绉绉的话不宜多说,其实这种模式还是挺常见的: * 比如我们在订手机套餐的时候,无论是自选还是电信公司配置好的,通常一个套餐包括

Java设计模式14:建造者模式

什么是建造者模式 发现很多框架的源码使用了建造者模式,看了一下觉得挺实用的,就写篇文章学习一下,顺便分享给大家. 建造者模式是什么呢?用一句话概括就是建造者模式的目的是为了分离对象的属性与创建过程,是的,只要记住并理解红字的几个部分,建造者模式你就懂了. 为什么需要建造者模式 建造者模式是构造方法的一种替代方案,为什么需要建造者模式,我们可以想,假设有一个对象里面有20个属性: 属性1 属性2 ... 属性20 对开发者来说这不是疯了,也就是说我要去使用这个对象,我得去了解每个属性的含义,然后在

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

一.概述 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示: 二.模式中的角色 Builder:为创建一个Product对象的各个部件指定抽象接口: ConcreteBuilder:实现Builder的接口以构造和装配该产品的各个部件:定义并明确它所创建的表示:提供一个检索产品的接口: Director:构造一个使用Builder接口的对象: Product:表示被构造的复杂对象,ConcreteBuilder创建该产品的内部表示并定义它的装配过程:包含定义组成部件的类,

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

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

设计模式--17、建造者模式

[转]建造者模式 一个人活到70岁以上,都会经历这样的几个阶段:婴儿,少年,青年,中年,老年.并且每个人在各个阶段肯定是不一样的呀,我觉得可以说世界上不存在两个人在人生的这5个阶段的生活完全一样,但是活到70岁以上的人,都经历了这几个阶段是肯定的.实际上这是一个比较经典的建造者模式的例子了. 1.初识建造者模式 建造者模式实际上是常用的设计模式.顾名思义,builder的意思是建造者或者建筑工人,谈到建造自然会想到楼房.楼房是千差万别的,楼房的外形.层数.内部房间的数量.房间的装饰等等都不一样,

大话设计模式C++版——建造者模式

日常做菜的过程中,经常会有忘记放盐或者放2次盐的经历,最后导致好好的一盘菜让大家无从下口.这个时候就需要用到建造者模式来规范炒菜的过程,来保证每一道菜都会经历加油.放食物.放盐.放味精这4道基本的工序,同时保证每道工序不会重复. 1.炒菜基类 class CCook { public: CCook() {} virtual ~CCook() {} //建造过程函数 //为了保证所有的子类能够按照指定顺序依次实现完整的建造过程,而不会忘记某一个过程的调用(如忘了放盐) void Cook() {

Java设计模式之(建造者模式)

建造者模式:是将一个复杂的对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示. 建造者模式通常包括下面几个角色: 1. builder:抽象建造者,给出一个抽象接口,以规范产品对象的各个组成成分的建造.这个接口规定要实现复杂对象的哪些部分的创建,并不涉及具体的对象部件的创建.2. ConcreteBuilder:建造者,实现Builder接口,针对不同的商业逻辑,具体化复杂对象的各部分的创建. 在建造过程完成后,提供产品的实例.3. Director:导演类,调用具体建造者来创建复杂