• C#面向对象设计模式纵横谈:Builder


     

    缘起:某一设施由几个部分组成,这些部分的组成不变(系统的高层抽象保持稳定),但每个部分要富于变化。

    动机(motivation):

    “一个复杂对象”的创建工作,通常由各个部分的子对象用一定算法构成;这些部分经常面临剧烈的变化,但组合算法却相对稳定。

    意图(intent):

    将一个复杂对象的构建与其表示相分离,使同样的构建过程可以创建不同的表示。

    结构(Structure):


    协作(
    Collaborations


    应用:

    abstract class House

    {

    }

    public abstract class Builder

    {

     public abstract void BuildDoor();

     public abstract void BuildWindows();

     public abstract House GetHouse(); //house is made of these elements listed above

    }

    public class GameManager

    {

     public static House CreateHouse(Builder builder)

    { //这里使基本稳定的,即所谓的算法

     builder.BuildDoor();

     builder.BuildDoor();

     

     builder.BuildWindows();

     return builder.GetHouse();

    }

    }

    public class RomanHouse:House

    {

    }

    public class RomanHouseBuilder: Builder

    {

     public override void BuildDoor();

     public override void BuildWindows();

     public override House GetHouse(); //house is made of these elements listed above

    }

    class App

    {

     public static void Main()

     {                                     //这样使变动的

    House house = GameManager.CreateHouse(new RomainHouseBuilder);

    //在。net中可以利用类型反射,这样客户端就不用重新编译,new RomainHouseBuilder就不用变动了

    string assemblyName= ConfigurationSettings[“BuilderAssembly”];

    string builderName = ConfigurationSettings[“Builder”];

    Assembly assembly = Assembly.Load(assemblyName);

    Typy t= assembly.GetType(“builderName”);

    Builder builder = Active.CreateInstance(t);

    House house = GameManager.CreateHouse(builder);

    }

    }

    要点:

    1. BuilderPart方法为虚函数,可返回接口或抽象类

    2. 难以应对“分步骤构建算法”的需求变动

  • 相关阅读:
    python
    C++的socket编程学习
    GooglePlay
    GooglePlay
    Admob
    cocos2dx
    cocos2dx
    cocos2dx
    cocos2dx
    浅谈白鹭Egret
  • 原文地址:https://www.cnblogs.com/xiachong/p/1072014.html
Copyright © 2020-2023  润新知