Builder(创建型模式——生成器模式)

场景举例:
假设创建游戏中的一个房屋,该房屋的构建由几个部分构成,各部分富于变化。
房屋创建好后,房屋内设施变换(设施的风格功能等)
其中:
稳定:制作流程(高层抽象)
不稳定:设施具体功能、风格(底层实现)——封装
动机
在软件系统中,有时候会面临“一个复杂对象”的创建工作,其通常由各部分的子对象用一定的算法构成;由于需求变化,这个复杂的对象的各个部分经常面临着剧烈的变化,但是他们组合在一起的算法却相对稳定。

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

结构
在这里插入图片描述
协作图
在这里插入图片描述
代码实例:
在这里插入图片描述

1、抽象Builder

public abstract class House
{
    
    
}

public abstract class Door
{
    
    
}
public abstract class Wall
{
    
    
}
public abstract class Window
{
    
    
}
public abstract class Floor
{
    
    
}

public abstract class Builder
{
    
    
    public abstract void CreateDoor();
    public abstract void CreateWall();
    public abstract void CreateWindow();
    public abstract void CreateFloor();

    public abstract House GetHouse();
}

2、GameManager——此处为稳定,不变
(此处即为将他们组合在一起的算法)

public abstract class GameManager//稳定
{
    
    
    public static House GetHouse(Builder builder)
    {
    
    
        builder.CreateFloor();
        builder.CreateWall();
        builder.CreateWall();
        builder.CreateDoor();
        builder.CreateWindow();
        builder.CreateWindow();
        builder.CreateWindow();

        return builder.GetHouse();
    }
}

3、具体类型部分

public class ModernHouse : House
{
    
    
}
public abstract class ModernDoor:Door
{
    
    
}
public abstract class ModernWall:Wall
{
    
    
}
public abstract class MordernWindow:Window
{
    
    
}
public abstract class MordernFloor:Floor
{
    
    
}

public class ModernBuilder:Builder
{
    
    
    public override void CreateDoor()
    {
    
    
        
    }

    public override void CreateWall()
    {
    
    
        
    }

    public override void CreateWindow()
    {
    
    
        
    }

    public override void CreateFloor()
    {
    
    
       
    }

    public override House GetHouse()
    {
    
    
        return new ModernHouse();
    }
}

4、使用

public static void Main(string[] args)
{
    
    
    House house=GameManager.GetHouse(new ModernBuilder());
}

在传递参数可以使用动态方法,这样在需求变动时,使用这部分的也不必修改
在这里插入图片描述
要点
在这里插入图片描述
抽象工厂:一组对象稳定,(一系列相互耦合对象)
Builder:构建过程稳定,(一个大对象的子对象),对象部分需求变化

当设计系统全不变或全变,不使用设计模式。设计模式针对部分变化,但部分不变。
设计模式:关闭修改,开放扩展。(对新需求,新增而非修改)

猜你喜欢

转载自blog.csdn.net/weixin_51565051/article/details/131394112
今日推荐