建造者模式

定義:

將一個複雜對象的構造與它的表示分離,使同樣的構建過程可以創建不同的表示,這樣的設計模式被稱爲建造者模式。

使用場景:

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;
        }
    }




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章