【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; }
        set { partB = value; }
    }
    public string PartC
    {
        get { return partC; }
        set { partC = value; }
    }
}
abstract class Builder
{
    //创建产品对象
    protected Product product = new Product();
    public abstract void BuildPartA();
    public abstract void BuildPartB();
    public abstract void BuildPartC();
    //返回产品对象
    public Product GetResult()
    {
        return product;
    }
}
class ConcreteBuilder1 : Builder
{
    public override void BuildPartA()
    {
        product.PartA = "A1";
    }
    public override void BuildPartB()
    {
        product.PartB = "B1";
    }
    public override void BuildPartC()
    {
        product.PartC = "C1";
    }
}
class Director
{
    private Builder builder;
    public Director(Builder builder)
   {
        this.builder = builder;
    }
    public void SetBuilder(Builder builder)
    {
        this.builder = builder;
    }
    //产品构建与组装方法
    public Product Construct()
    {
        builder.BuildPartA();
        builder.BuildPartB();
        builder.BuildPartC();
        return builder.GetResult();
    }
}
……
Builder builder = new ConcreteBuilder1(); //可通过配置文件实现
Director director = new Director(builder);
Product product = director.Construct();
……
时间: 2024-08-06 03:43:34

【2016-10-16】【坚持学习】【Day7】【建造者模式】的相关文章

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

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

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

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

设计模式之美学习-设计模式-建造者模式(十起)

需求 我们需要定义一个资源池配置类 ResourcePoolConfig.这里的资源池,你可以简单理解为线程池.连接池.对象池等.在这个资源池配置类中,有以下几个成员变量,也就是可配置项.现在,请你编写代码实现这个 ResourcePoolConfig 类. 实现方式一 实现 public class ResourcePoolConfig { private static final int DEFAULT_MAX_TOTAL = 8; private static final int DEFA

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

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

2016.10.24 继续学习

今天继续学习,进入面向对象的学习. 1.输出换行可以这样输出 System.out.println(); 2.数组学得有点蒙.... public class PracMultiArray { public static void main(String[] args) { int[][] a1 = {{1, 2, 4}, {3, 1, 2}, {14, 5, 3}}; System.out.println(a1[1][2]); for(int i=0;i<a1.length;i++){ for

2016.10.30 济南学习 Day2 下午 T1

他 [问题描述] 一张长度为??的纸带,我们可以从左至右编号为0 ? ??(纸带最左端标号为 0).现在有??次操作,每次将纸带沿着某个位置进行折叠,问所有操作之后纸带 的长度是多少. [输入格式] 第一行两个数字??, ??如题意所述. 接下来一行??个整数代表每次折叠的位置. [输出格式] 一行一个整数代表答案. [样例输入] 5 2 3 5 [样例输出] 2 [样例解释] 树上有只鸟. [数据规模与约定] 对于60%的数据,??, ?? ≤ 3000. 对于100%的数据,?? ≤ 101

2016.10.26 继续学习

今天继续学习面向对象部分 1.static的使用 静态方法不能访问非静态变量 非静态方法可以访问静态变量 a.静态变量 public class PracStaticParam { int id = 0; static int num = 0; PracStaticParam(int x) { this.id = x; num++; } public static void main(String[] args) { PracStaticParam s1 = new PracStaticPara

一段对话讲完建造者模式

截止今天,小秋学习Java刚刚满三个月.此刻的小秋感觉自己Java学的还不错,想去帅地面前炫耀一番,于是,就发生了一下一番对话-.. 得意的小秋 帅地:嗨,小秋,看你今天气色不错啊.最近Java学的怎么样了? 小秋:说实话,比起三个月前我学指针的那段日子,这Java太友好了,感觉就是分分种的事(暗自得意). 帅地:我靠,你这口气还挺大啊.从c的面向过程到Java的面向对象,还习惯不? 小秋:哎,还行,无非就是"一切皆对象",Java中的对象感觉类似于C中的结构体.反正不过三七二十一,我

23种设计模式----------建造者模式

建造者模式:像是模板方法模式的升级.也叫生成器模式.将一个复杂对象的构造与它的表示分离,使得同样的构建过程可以创建不同的表示.其实就是创建一大类的东西, 但是具体又有些差异. 在建造者模式中,一般有四个角色: 1,Product产品类. 该类一般实现了模板方法模式. 2,Builder抽象的建造者. 规范产品的组建,一般是由子类实现. 3,ConcreteBuilder具体的建造者. 实现抽象类定义的所有方法,并且可以返回一个组建好的具体对象. 4,Director导演类(一般是包涵多种具体产品

建造者模式

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