C#面向对象设计模式学习笔记(3) - Builder 生成器模式(创建型模式)
2009-12-07 17:22
1001 查看
在软件系统中,有时候面临着“一个复杂对象”的创建工作,其通常由各个部分的子对象用一定的算法构成:由于需求的变化,这个复杂对象的各个部分经常面临着剧烈的变化,但是将它们组合在一起的算法却相对稳定。
如何应对这种变化?如何提供一种“封装机制”来隔离出“复杂对象的各个部分”的变化,从而保持系统中的“稳定构建算法”不随着需求改变而改变?
将一个复杂对象的构建与其表示相分离,使得同样的构建过程可以创建不同的表示。
结构:
协作:
要点:
1、Builder模式主要用于“分步骤构建一个复杂的对象”。在这其中“分步骤”是一个稳定的算法,而复杂对象的各个部分则经常变化。
2、变化点在哪里,封装哪里--Builder模式主要在于应对“复杂对象各个部分”的频繁需求变动。其缺点在于难以应付“分步骤构建算法”的需求变动。
3、Abstract Factory模式解决“系列对象”的需求变化,Builder模式解决“对象部分”的需求变化。Builder模式通常和Composite模式组合使用。
问答:
1、Builder模式中的BuildPart方法为虚方法,Builder模式中的方法可以返回接口或者抽象类;
2、Builder模式主要在于应对“各子对象”的需求变动,其缺点在于难以应对“分步骤构建算法”的需求变动;
如何应对这种变化?如何提供一种“封装机制”来隔离出“复杂对象的各个部分”的变化,从而保持系统中的“稳定构建算法”不随着需求改变而改变?
将一个复杂对象的构建与其表示相分离,使得同样的构建过程可以创建不同的表示。
结构:
协作:
public abstract class House { } public abstract class Door { } public abstract class Wall { } public abstract class Windows { } public abstract class Floor { } public abstract class HouseCeiling { } public abstract class Builder { public abstract void BuildDoor();//门 public abstract void BuildWall();//墙 public abstract void BuildWindows();//窗户 public abstract void BuildFloor();//地板 public abstract void BuildHouseCeiling();//屋顶 public abstract House GetHouse();//构建房子 }
public class RomainHouse : House { } public class RomanDoor : Door { } public class RomanWall : Wall { } public class RomanWindows : Windows { } public class RomanFloor : Floor { } public class RomanHouseCeiling : HouseCeiling { } public class RomainHouseBuilder : Builder { public override void BuildDoor() { } public override void BuildWall() { } public override void BuildWindows() { } public override void BuildFloor() { } public override void BuildHouseCeiling() { } public override House GetHouse() { return new RomainHouse(); } }
public class GameManager { public static House CreateHouse(Builder builder) { builder.BuildWall();//创建第一面墙 builder.BuildWall();//创建第二面墙 builder.BuildWall();//创建第三面墙 builder.BuildWall();//创建第四面墙 builder.BuildWindows();//创建第一个窗 builder.BuildWindows();//创建第二个窗 builder.BuildDoor(); builder.BuildFloor(); builder.BuildHouseCeiling(); return builder.GetHouse(); } } class App { public static void Main() { //House house = GameManager.CreateHouse(new RomainHouseBuilder()); string assemblyName = System.Configuration.ConfigurationSettings.AppSettings["BuilderAssembly"]; string builderName = System.Configuration.ConfigurationSettings.AppSettings["BuilderClass"]; System.Reflection.Assembly assembly = System.Reflection.Assembly.Load(assemblyName); Type t = assembly.GetType(builderName); Builder builder = (Builder)Activator.CreateInstance(t); House house = GameManager.CreateHouse(builder); } }
要点:
1、Builder模式主要用于“分步骤构建一个复杂的对象”。在这其中“分步骤”是一个稳定的算法,而复杂对象的各个部分则经常变化。
2、变化点在哪里,封装哪里--Builder模式主要在于应对“复杂对象各个部分”的频繁需求变动。其缺点在于难以应付“分步骤构建算法”的需求变动。
3、Abstract Factory模式解决“系列对象”的需求变化,Builder模式解决“对象部分”的需求变化。Builder模式通常和Composite模式组合使用。
问答:
1、Builder模式中的BuildPart方法为虚方法,Builder模式中的方法可以返回接口或者抽象类;
2、Builder模式主要在于应对“各子对象”的需求变动,其缺点在于难以应对“分步骤构建算法”的需求变动;
相关文章推荐
- C#面向对象设计模式学习笔记(1) - Singleton 单件模式(创建型模式)
- 面向对象设计模式学习---Builder模式(创建型)
- C#面向对象设计模式学习笔记(5) - Prototype 原型模式(创建型模式)
- 面向对象设计模式—创建型模式(学习笔记)
- Builder生成器(创建型设计模式)面向对象设计模式纵横谈讲座笔记之四
- C#面向对象设计模式学习笔记(4) - Factory Method 工厂方法模式(创建型模式)
- 【学习笔记06】java面向对象-main方法、单例设计模式
- 设计模式学习笔记--Builder生成器模式
- C#面向对象设计模式学习笔记(8) - Composite 组合模式(结构型模式)
- 跟着实例学习设计模式(6)-生成器模式builder(创建型)
- Sigleton单件(创建型模式)--面向对象设计模式纵横谈讲座笔记之二
- 设计模式学习笔记二:面向对象基础二
- 设计模式学习笔记二:面向对象基础五之集合和泛型
- 面向对象设计模式之Composite组合模式学习笔记
- 面向对象设计模式学习---Abstract Factory模式(创建型)
- C#面向对象设计模式纵横谈 学习笔记22 State模式(行为型模式)
- 设计模式学习笔记(四)——Builder生成器模式
- 黑马程序员_学习笔记:4) 面向对象2:继承、this、super、finally、Abstract、模板设计模式、接口
- 面向对象设计模式学习笔记(1)
- 面向对象设计模式学习---Singleton模式(创建型)