您的位置:首页 > 其它

建造者模式

2016-06-25 11:12 429 查看
定义:

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

使用场景:

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;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息