C# 设计模式学习四 Builder生成器模式
1,Builder模式
① 假设构建一个房屋House类,该房屋有几个部分组成,比如门,窗,墙,而其每个部分都富于变化,如个样式的门,每个样式都有一个或者几个
② 如果使用直观的设计方法,每一个房屋部分的变化,都将导致房屋要重新修正(但是房屋,门,窗,墙都没有变化)
实际上是用来应对,系统的主线相对稳定,枝叶边角的部分,变化频繁。
2,动机(如何封装变化点)
① 在软件系统中,有时候面临着“一个复杂对象”的创建工作,其通常由各个部分的子对象用一定的算法构成,由于需求的变化,各个部分经常面临着剧烈的变化
但是将它们组合在一起的算法(或结构)区相对稳定。
② 问题:如何应对该变化,如何提供一种“封装机制”来隔离出“复杂对象的各个部分”的变化,从而保持系统中的“稳定构建算法”不随着需求改变而改变
3,意图
讲一个复杂对象的构建与其表示相分离,使得同样的构建过程可以创建不同的表示。[《设计模式》GoF]
简单实例如下:
该实例,描述一个房屋的构造,并为该房屋构建一种新的风格
房屋类 House.cs
public abstract class House
{
//复杂构造
public string Wall { get; set; }
public string Door { get; set; }
public string Windows { get; set; }
public string Floor { get; set; }
public string HouseCeiling { get; set; }
}
Builder生成器 Builder.cs
public abstract class House
{
//复杂构造
public string Wall { get; set; }
public string Door { get; set; }
public string Windows { get; set; }
public string Floor { get; set; }
public string HouseCeiling { get; set; }
}
GameManager 类用来使用(构建房屋,是逻辑结构比较稳定的部分) GameManager.cs
public class GameManager
{
//下面记录的是系统的处理过程,也是相对稳定的部分(结构),
//静态方法,一个条用构造器的参数,用该构造器创建房屋的各个部分
public static House CreateHouse(Builder builder)
{
//创建两个门
builder.BuildDoor();
builder.BuildDoor();
相关文档:
命名空间: MapInfo.Data
MapInfo.Data 命名空间包含了实现 MapInfo .NET 数据提供方的类和接口。 对 MapInfo 数据的访问有两种形式:作为使用 SQL 与数据交互的 ADO.NET 数据提供程序和作为使用类与数据交互的 Feature 对象。 MapIn ......
软件界面的响应特性是判断一款软件的非常重要的方面。一般来说,不管你软件功能做得有多么奇妙,如果软件有一点点死机的感觉都会让用户感到很讨厌,甚至怀疑你软件里是否藏有更大的问题。
要提高界面的响应特性,最好的办法莫过于使用多线程,并把呈现界面的线程独立出来。以前只有使用C++才能实现的多线程功能,现在在.Ne ......
C#利用webrequest计算待下载的文件大小
string URL = textBox1.Text;
string filetype = URL.Substring(URL.LastIndexOf(".") + 1, (URL.Length - URL.LastIndexOf(".") - 1));
filetypevalue.Text = filetype.ToUpper();
string filename = URL.Substring(URL.LastIn ......
1 父类 partial class FormBillTemplet:Form
/// <summary>
/// 新单
/// </summary>
/// <param name="s ......
http://blog.csdn.net/carl2380/archive/2009/11/18/4826973.aspx
简介:
本文着重讲述了如果用WM_COPYDATA消息来实现两个进程之间传递数据.
进程之间通讯的几种方法:
在Windows程序中,各个进程之间常常需要交换数据,进行数据通讯。常用的方法有
使用内存映射文件
通过共享内存DLL共享内存
使 ......