建造者模式

定义:

将一个复杂对象的构造与它的表示分离,使同样的构建过程可以创建不同的表示,这样的设计模式被称为建造者模式。

使用场景:

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




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值