建造者模式
2016-06-25 11:12
429 查看
定义:
将一个复杂对象的构造与它的表示分离,使同样的构建过程可以创建不同的表示,这样的设计模式被称为建造者模式。
使用场景:
1、需要创建的对象有复杂的结构,他的结构会有若干个对象组成
2、在处理当前对象是参数数据的获取需要其他的对象或逻辑处理获得
3、与当前对象有类似结构的对象,只是使用其中的部分或处理逻辑存在不同,实现重复使用扩展
优点:
1、使用的对象可以自由的建造者模式并变化,而使用建造者模式可以使客户端不必知道产品内部组成的细节。
2、对象内的逻辑提取改造方便,不会产生相互的影响,方便控制
3、可是使对象的处理可以不断细化,使得业务分离变得简单
缺点:
1、具有较多的共同点的复杂实体,其组成部分要类似。
2、产品变化复杂,需要定义较多的类来适应其变化,导致系统变得很庞大。
下面通过用户注册的例子来使用例子,如下
用户信息类
/// <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;
}
}会员用户注册业务
将一个复杂对象的构造与它的表示分离,使同样的构建过程可以创建不同的表示,这样的设计模式被称为建造者模式。
使用场景:
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; } }
相关文章推荐
- PropertyChangeListener简单理解
- 什么是设计模式
- 设计模式之创建型模式 - 特别的变量问题
- 七、设计模式——装饰模式
- 设计模式总结
- 设计模式之创建型模式
- 浅谈设计模式的学习
- Ruby设计模式编程之适配器模式实战攻略
- 实例讲解Ruby使用设计模式中的装饰器模式的方法
- 设计模式中的模板方法模式在Ruby中的应用实例两则
- Ruby设计模式编程中对外观模式的应用实例分析
- 实例解析Ruby设计模式编程中Strategy策略模式的使用
- Ruby中使用设计模式中的简单工厂模式和工厂方法模式
- Ruby使用设计模式中的代理模式与装饰模式的代码实例
- 详解组合模式的结构及其在Ruby设计模式编程中的运用
- C# 设计模式系列教程-建造者模式
- C#编程中使用设计模式中的原型模式的实例讲解
- 使用设计模式中的工厂方法模式进行C#编程的示例讲解
- 实例解析C#设计模式编程中简单工厂模式的使用