C#设计模式:建造者模式(Builder Pattern)
一,建造者模式(Builder Pattern)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace _4.建造者模式
{
//建造者模式(Builder Pattern):将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。建造者模式是一种对象创建型模式。
//与抽象工厂的区别是:抽象工厂是针对系列对象(如会出现各种车对象),然而创建者模式是针对一个对象的局部变化(如单个对象有不同武器等)
class Program
{
static void Main(string[] args)
{
Builder builder = new USA("黑皮肤", "美国人", "英语");
Director director = new Director(builder);
People product = director.Construct();
Console.Write("\r\n"); Builder builder1 = new USA("白皮肤", "英国人", "日语");
Director director1 = new Director(builder1);
People product1 = director1.Construct();
Console.ReadKey();
}
}
/// <summary>
/// 创建抽象类
/// </summary>
public abstract class Builder
{
protected People people = new People();
public abstract void SetCountry();
public abstract void SetSpeak();
public abstract void SetSkinColor(); public People getResult()
{
return people;
}
}
/// <summary>
/// 被创建的对象,对象会出现局部的不同,
/// </summary>
public class People
{
public People()
{
Console.Write("我们都是人,但是");
}
}
public class USA : Builder
{
private string _country;
private string _speak;
private string _skincolor;
public USA(string skincolor, string country, string speak)
{
this._country = country;
this._skincolor = skincolor;
this._speak = speak;
}
public override void SetSkinColor()
{
Console.Write(_skincolor + "的");
}
public override void SetCountry()
{
Console.Write(_country);
} public override void SetSpeak()
{
Console.Write("讲" + _speak);
}
}
public class UK : Builder
{
private string _country;
private string _speak;
private string _skincolor;
public UK(string skincolor, string country, string speak)
{
this._country = country;
this._skincolor = skincolor;
this._speak = speak;
}
public override void SetSkinColor()
{
Console.Write(_skincolor + "的");
}
public override void SetCountry()
{
Console.Write(_country);
} public override void SetSpeak()
{
Console.Write("讲" + _speak);
}
}
/// <summary>
/// 执行者,创建对象
/// </summary>
public class Director
{
private Builder builder;
public Director(Builder bu)
{
this.builder = bu;
}
public People Construct()
{
builder.SetSkinColor();
builder.SetCountry();
builder.SetSpeak();
return builder.getResult();
}
}
}
二,根据上面代码,我们会感觉和抽象工厂很像,他们两个是什么呢?
1》建造者模式将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。建造者模式是一种复杂对象创建型模式。
2》抽象工厂则是针对系列对象,建造者模式是一种复杂对象
三,相对抽象工厂和建造者的一种复杂对象怎么理解呢?
我们就以People为对象来理解:
1》在建造者模式中,我们可以通过抽象的类创建出美国人和英国人对象,而这对象则是有自己独立的东西等,如黑皮肤的美国人讲英语和白皮肤的英国人讲日语,这里的人理解成为同一种复杂的对象
2》而在重抽象工厂中,在英国人工厂中,只能实现白皮肤的英国人讲日语。而不会出现实现了黑皮肤的美国人讲英语(这个属于美国人的工厂实现的),所以对于抽象工厂,在此时我们将英国人和美国人理解为两个不同的对象,所以抽象工厂是针对系列对象
C#设计模式:建造者模式(Builder Pattern)的更多相关文章
- 设计模式 - 建造者模式 Builder Pattern
简介 场景 在创建复杂对象时,用户无须关心该对象所包含的属性以及它们的组装方式,只需要指定复杂对象的类型和内容就可以构建它们. 模式定义 建造者模式:将一个复杂对象的构建与表示分离,使得同样的构建过程 ...
- 23种设计模式--建造者模式-Builder Pattern
一.建造模式的介绍 建造者模式就是将零件组装成一个整体,用官方一点的话来讲就是将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示.生活中比如说组装电脑,汽车等等这些都是建 ...
- 【原】iOS设计模式之:建造者模式Builder Pattern,用于改进初始化参数
本文主要讨论一下iOS中的Builder Pattern.与网上很多版本不同,本文不去长篇大论地解释建造者模式的概念,那些东西太虚了.设计模式这种东西是为了解决实际问题的,不能为了设计模式而设计模式, ...
- 乐在其中设计模式(C#) - 建造者模式(Builder Pattern)
原文:乐在其中设计模式(C#) - 建造者模式(Builder Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 建造者模式(Builder Pattern) 作者:webabc ...
- 【设计模式】建造者模式 Builder Pattern
前面学习了简单工厂模式,工厂方法模式以及抽象工厂模式,这些都是创建类的对象所使用的一些常用的方法和套路, 那么如果我们创建一个很复杂的对象可上面的三种方法都不太适合,那么“专业的事交给专业人去做”,2 ...
- iOS设计模式之:建造者模式Builder Pattern,用于改进初始化参数
转自:http://www.cnblogs.com/wengzilin/p/4365855.html 本文主要讨论一下iOS中的Builder Pattern.与网上很多版本不同,本文不去长篇大论地解 ...
- 设计模式系列之建造者模式(Builder Pattern)——复杂对象的组装与创建
说明:设计模式系列文章是读刘伟所著<设计模式的艺术之道(软件开发人员内功修炼之道)>一书的阅读笔记.个人感觉这本书讲的不错,有兴趣推荐读一读.详细内容也可以看看此书作者的博客https:/ ...
- 二十四种设计模式:建造者模式(Builder Pattern)
建造者模式(Builder Pattern) 介绍将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示. 示例用同样的构建过程创建Sql和Xml的Insert()方法和Get()方 ...
- 建造者模式(Builder Pattern)
建造者模式(Builder Pattern) 它可以将多个简单的对象一步一步构建成一个复杂的对象. 意图:将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示. 主要解决:主要解决在软 ...
- 设计模式—建造者模式(Builder)
title: 设计模式-建造者模式 建造者模式(Builder)是一步一步创建一个复杂的对象,它允许用户只通过指定复杂对象的类型和内容就可以构建它们,用户不需要知道内部的具体构建细节.建造者模式属于对 ...
随机推荐
- Wannafly挑战赛27 C蓝魔法师
链接Wannafly挑战赛27 C蓝魔法师 给出一棵树,求有多少种删边方案,使得删后的图每个连通块大小小于等于\(k\),\(n,k\leq 2*10^3\) 假设我们正在考虑\(i\)这个子树,那么 ...
- jinfo 干涉java runtime的jvm参数
https://blog.csdn.net/bolg_hero/article/details/78156311 jinfo使用介绍可以用来查看正在运行的Java应用程序的扩展参数,甚至支持在运行时, ...
- 00.斐波那契数列第n项
# 斐波那契数列第n项 # 1 1 2 3 5 8 def fib(n): if n <= 2: return 1 else: return fib(n-2)+fib(n-1) def fib2 ...
- Test 6.29 T3 小学生
问题描述 "不错,不错!那么,准备好迎接下一道题了么?"一道白光闪过,CJK 眼前出现了 1e100 个小学生."他们中,有一些人轨了我的机子.现在,我需要你在 1S 之 ...
- BZOJ 3930: [CQOI2015]选数 莫比乌斯反演 + 杜教筛
求 $\sum_{i=L}^{R}\sum_{i'=L}^{R}....[gcd_{i=1}^{n}(i)==k]$ $\Rightarrow \sum_{i=\frac{L}{k}}^{\fra ...
- yum源更换
折腾了半天,怀疑自己能力 的时候,发现原来不是我的错.树莓派换源国内的aliyun,163都不能用,最好找到这个 # CentOS-Base.repo # # The mirror system us ...
- OUC-NULL -凡事遇则立
[OUC-NULL-凡事遇则立] 一.项目的GITHUB地址 https://github.com/OUC-null/null- 二.对遇到的问题思考及总结 一开始进度较慢,大家一开始也没太找到前进的 ...
- Python_014(面向对象之继承)
一.面向对象之继承 1.初始继承 引入:面向对象的三大特性:继承,多态,封装 a.继承是创建新类的一种方式,在python中,新建的类可以继承一个或多个父类,父类又可称为基类或超类;新建的类称为派生类 ...
- 【2019 Multi-University Training Contest 9】
01: 02:https://www.cnblogs.com/myx12345/p/11666961.html 03: 04: 05:https://www.cnblogs.com/myx12345/ ...
- WPF 设置窗体大小为显示器工作区域大小
最近做的项目遇到一个问题,窗体在1680*1050分辨率下显示,系统字体设置为小字体时,显示没问题,但是调到中等字体时,窗体显示位置出了问题.主窗体为无边框窗体,拖动及放大缩小事件都是自己写的. ...