建造者模式
建造型模式用于创建过程稳定,但配置多变的对象。
using System;
using System.Collections.Generic;
/// <summary>
/// 建造者模式的演变
/// 省略了指挥者角色和抽象建造者角色
/// 此时具体建造者角色扮演了指挥者和建造者两个角色
/// </summary>
public class Builder
{
// 具体建造者角色的代码
private readonly Product _product = new Product();
public void BuildPartA()
{
_product.Add("PartA");
}
public void BuildPartB()
{
_product.Add("PartB");
}
public Product GetProduct()
{
return _product;
}
// 指挥者角色的代码
public void Construct()
{
BuildPartA();
BuildPartB();
}
}
/// <summary>
/// 产品类
/// </summary>
public class Product
{
// 产品组件集合
private readonly IList<string> _parts = new List<string>();
// 把单个组件添加到产品组件集合中
public void Add(string part)
{
_parts.Add(part);
}
public void Show()
{
Console.WriteLine("产品开始在组装.......");
foreach (string part in _parts)
{
Console.WriteLine("组件" + part + "已装好");
}
Console.WriteLine("产品组装完成");
}
}
// 此时客户端也要做相应调整
class Client
{
private static Builder _builder;
static void Main(string[] args)
{
_builder = new Builder();
_builder.Construct();
Product product = _builder.GetProduct();
product.Show();
Console.Read();
}
}
建造模式的实现要点:
在建造者模式中,指挥者是直接与客户端打交道的,指挥者将客户端创建产品的请求划分为对各个部件的建造请求,再将这些请求委派到具体建造者角色,具体建造者角色是完成具体产品的构建工作的,却不为客户所知道。
建造者模式主要用于“分步骤来构建一个复杂的对象”,其中“分步骤”是一个固定的组合过程,而复杂对象的各个部分是经常变化的(也就是说电脑的内部组件是经常变化的,这里指的的变化如硬盘的大小变了,CPU由单核变双核等)。
产品不需要抽象类,由于建造模式的创建出来的最终产品可能差异很大,所以不大可能提炼出一个抽象产品类。
在前面文章中介绍的抽象工厂模式解决了“系列产品”的需求变化,而建造者模式解决的是 “产品部分” 的需要变化。
由于建造者隐藏了具体产品的组装过程,所以要改变一个产品的内部表示,只需要再实现一个具体的建造者就可以了,从而能很好地应对产品组成组件的需求变化。
转载自:https://www.cnblogs.com/guyun/p/6183795.html
原型模式
用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。
这样子在想获得和原来对象一样的对象时,直接通过拷贝即可,而不需要重复去构建一个对象。
需要注意的地方是,这里的系统自带的拷贝只是一个浅拷贝,想要深度拷贝,还得需要自己实现。
网友评论