设计模式--builder--创建型

Builder模式的缘起
• 假设创建游戏中的一个房屋House设施,该房屋的构建由几
个部分组成,且各个部分要富于变化。
• 如果使用最直观的设计方法,每一个房屋部分的变化,都
将导致房屋构建的重新修正……
构件房屋的序列不变

动机(Motivation)
在软件系统中,有时候面临着“一个复杂对象”的创建工作,
其通常由各个部分的子对象用一定的算法构成;由于需求
的变化,这个复杂对象的各个部分经常面临着剧烈的变
化,但是将它们组合在一起的算法却相对稳定。
如何应对这种变化?如何提供一种“封装机制”来隔离出“复
杂对象的各个部分”的变化,从而保持系统中的“稳定构建算
法”不随着需求改变而改变?


意图(Intent)
将一个复杂对象的构建与其表示相分离,使得同样
的构建过程可以创建不同的表示。
——《设计模式》GoF

结构(Structure)


协作(Collaborations)


abstract   class  House
{


}

abstract   class  Door
{
}

abstract   class  Window
{
}


abstract   class  Floor
{
}


public   class   RomainWall:Wall
{
}


public   class  RomainDoor:Door
{
}

public   class  RomailWindow:Window
{
}


public   class  RomainFloor : Floor
{
}


public   class  RomainDoor:Door
{
}





public   abstract   class  Builder
{
  
public abstract void BuildDoor();
  
public abstract void BuildWall();
  
public abstract void BuildWindows();
  
public abstract void BuildDoor();

  
public abstract void BuildFloor();
  
  
public abstract House GetHouse();
  
}


  
public   class  RomainHouse : House
{
   

}

public   class  RomainHouseBuilder : Builder
{
public voerride void BuildDoor()
{}
 
public voerride void BuildWall()
{}  
public voerride void BuildWindows()
{}  
public voerride void BuildDoor()
{}  
public voerride void BuildFloor()
{}  
public voerride void BuildWindows()
{}

}

  
public   class  GameManager
{
 
   
public static House CreateHouse(Builder builder)
{   this.builer=builer}   
                     
///稳定的
    builder.BuildDoor();
    builder.BuildDoor();


   builder.BuildWindows();
   builder.BuildWindows();

   builder.BuildWall(); 
   builder.BuildWall();
   builder.BuildWall();
   builder.BuildWall();

  
return buider.GetHouse():
  }


}

class  App
{
 
public static void Main()
{
  
string assemblyName=ConfigurationSettings["BuilderAssembly"]; //这里就是用到配置文件
  string builderName=ConfigurationSettings["BuilderClass"];   //可以让用配置文件来更换builder
  Assembly assembly=Assembly.Load(assemblyName);
  Type t
=assembly.GetType["builderName"];
  Builder builder
=Activator.CreateInstance(t);
  House house
= GameManager.CreateHouse(builder);
}

}


补充一下 java 的 的写法 
// 配置文家可以是 propeties 或 xml 
   
// ClassLoader cl=Thread.currentThread().getContextClassLoader(); 
   
//   Builder builder =cl.loadClass("Builder");
   从被装载的路径使用自己装载器来装载Servlet类
// Class servletClass =
  //  loader.loadClass(m_config.getInitParameter( "servlet");
    //Builder builder= (Builder)servletClass.newInstance();

  Builder builder 
=   (MyClass) Class.forName(classname).newInstance();  // classname 就是通过




 

 

 

Builder 模式的几个要点
• Builder 模式主要用于“分步骤构建一个复杂的对
象”。在这其中“分步骤”是一个稳定的算法,而复
杂对象的各个部分则经常变化。
• 变化点在哪里,封装哪里—— Builder模式主要在
于应对“复杂对象各个部分”的频繁需求变动。其
缺点在于难以应对“分步骤构建算法”的需求变动。
• Abstract Factory模式解决“系列对象”的需求变
化,Builder模式解决“对象部分”的需求变化。
Builder模式通常和Composite模式组合使用。

应用 asp.net ,struts ,jsf,

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
讲  师:李建忠 上海祝成信息科技有限公司 高级培训讲师 MSDN特邀讲师 C#面向对象设计模式纵横谈(1):面向对象设计模式与原则 C#面向对象设计模式纵横谈(2):Singleton 单件(创建模式) C#面向对象设计模式纵横谈(3):Abstract Factory 抽象工厂模式(创建模式) C#面向对象设计模式纵横谈(4):Builder 生成器模式(创建模式) C#面向对象设计模式纵横谈(5):Factory Method 工厂方法模式(创建模式) C#面向对象设计模式纵横谈(6):Prototype 原模式(创建模式) C#面向对象设计模式纵横谈(7):Adapter 适配器模式(结构模式) C#面向对象设计模式纵横谈(8):Bridge 桥接模式(结构模式) C#面向对象设计模式纵横谈(9):Composite 组合模式(结构模式) C#面向对象设计模式纵横谈(10):Decorator 装饰模式(结构模式) C#面向对象设计模式纵横谈(11):Facade 外观模式(结构模式) C#面向对象设计模式纵横谈(12):Flyweight 享元模式(结构模式) C#面向对象设计模式纵横谈(13):Proxy 代理模式(结构模式) C#面向对象设计模式纵横谈(14):Chain of Responsibility 职责链模式(行为模式) C#面向对象设计模式纵横谈(15):(行为模式) Command 命令模式 C#面向对象设计模式纵横谈(16):(行为模式) Interpreter 解释器模式 C#面向对象设计模式纵横谈(17):(行为模式) Mediator 中介者模式 C#面向对象设计模式纵横谈(18):(行为模式) Iterator 迭代器模式 C#面向对象设计模式纵横谈(19):(行为模式) Observer 观察者模式 C#面向对象设计模式纵横谈(20):(行为模式) Chain Of Responsibility 职责链模式 C#面向对象设计模式纵横谈(21):(行为模式) Memento 备忘录模式 C#面向对象设计模式纵横谈(22):(行为模式) State 状态模式 C#面向对象设计模式纵横谈(23):(行为模式) Strategy 策略模式 C#面向对象设计模式纵横谈(24):(行为模式) Visitor 访问者模式 C#面向对象设计模式纵横谈(25):设计模式总结
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值