定義:
將一個複雜對象的構造與它的表示分離,使同樣的構建過程可以創建不同的表示,這樣的設計模式被稱爲建造者模式。
使用場景:
1、需要創建的對象有複雜的結構,他的結構會有若干個對象組成
2、在處理當前對象是參數數據的獲取需要其他的對象或邏輯處理獲得
3、與當前對象有類似結構的對象,只是使用其中的部分或處理邏輯存在不同,實現重複使用擴展
優點:
1、使用的對象可以自由的建造者模式並變化,而使用建造者模式可以使客戶端不必知道產品內部組成的細節。
2、對象內的邏輯提取改造方便,不會產生相互的影響,方便控制
3、可是使對象的處理可以不斷細化,使得業務分離變得簡單
缺點:
1、具有較多的共同點的複雜實體,其組成部分要類似。
2、產品變化複雜,需要定義較多的類來適應其變化,導致系統變得很龐大。
下面通過用戶註冊的例子來使用例子,如下
用戶信息類
public class User
{
/// <summary>
/// 名稱
/// </summary>
public string Name { get; set; }
/// <summary>
/// 性別
/// </summary>
public string Sex { get; set; }
/// <summary>
/// 手機
/// </summary>
public string Mobile { get; set; }
/// <summary>
/// 公司信息
/// </summary>
public string Company { get; set; }
}
用戶註冊業務抽象
/// <summary>
/// 用戶註冊業務抽象
/// </summary>
public abstract class IUserRegister
{
private User user = new User();
/// <summary>
/// 註冊用戶信息
/// </summary>
/// <returns></returns>
public abstract bool RegisterUser();
/// <summary>
/// 註冊成功後可返回用戶信息
/// </summary>
/// <returns></returns>
public abstract bool RegisterCompay();
/// <summary>
/// 返回用戶信息
/// </summary>
/// <returns></returns>
public User GetUser()
{
return user;
}
}
會員用戶註冊業務
public class MemberUserRegisterBLL : IUserRegister
{
/// <summary>
/// 會員用戶註冊業務
/// </summary>
/// <returns></returns>
public override bool RegisterCompay()
{
throw new NotImplementedException();
}
/// <summary>
/// 註冊會員公司信息
/// </summary>
/// <returns></returns>
public override bool RegisterUser()
{
throw new NotImplementedException();
}
}
普通用註冊業務
/// <summary>
/// 普通用註冊業務
/// </summary>
public class OrdinaryUserRegisterBLL : IUserRegister
{
/// <summary>
/// 註冊普通用戶信息
/// </summary>
/// <returns></returns>
public override bool RegisterUser()
{
throw new NotImplementedException();
}
/// <summary>
/// 註冊普通公司信息
/// </summary>
/// <returns></returns>
public override bool RegisterCompay()
{
throw new NotImplementedException();
}
}
用戶註冊過程
/// <summary>
/// 用戶註冊過程
/// </summary>
public class UserRegisterProcess
{
/// <summary>
/// 註冊業務
/// </summary>
private IUserRegister UserRegister { get; set; }
/// <summary>
/// 設置用戶註冊業務實體
/// </summary>
/// <param name="userRegister"></param>
public void SetUserRegisterBLL(IUserRegister userRegister)
{
this.UserRegister = userRegister;
}
/// <summary>
/// 註冊過程
/// </summary>
/// <returns></returns>
public User Process()
{
var user = new User();
if (!UserRegister.RegisterCompay())//註冊公司
return user;
if (UserRegister.RegisterUser())//註冊人員信息
return user;
user = UserRegister.GetUser();
return user;
}
}
用戶註冊調用 public class UserRegisterClient
{
/// <summary>
/// 註冊<span style="font-family: Arial, Helvetica, sans-serif;">普通</span>用戶信息
/// </summary>
/// <returns></returns>
public User SetUser()
{
var registerProcess = new UserRegisterProcess();
var ordinaryUserRegisterBLL = new OrdinaryUserRegisterBLL();//普通用戶註冊業務實體,如果是會員用戶,這裏註冊則改爲會員用戶註冊業務實體
registerProcess.SetUserRegisterBLL(ordinaryUserRegisterBLL);
User user = registerProcess.Process();
return user;
}
}