设计模式:六.建造者模式

建造者模式是建造者模式的一种。
一个人活到70岁以上,都会经历这样的几个阶段:婴儿,少年,青年,中年,老年,并且每个人在各个阶段肯定是不一样的,我觉得可以说世界上不存在两个人在人生的这个5个阶段的生活完全一样,但是活到70岁以上的人,都经历了这几个阶段。
建造者模式:是将一个复杂的对象的构建与它的表示分离,使得同样的构造过程可以创建不同的表示。建造者模式和工厂模式非常相似啊,建造者模式注重零部件的组装过程,而工厂方法模式更注重零件的创建过程。两者也有结合使用,比如众神造人,女娲利用建造者模式负责吧灵魂,耳目,手臂等组合成一个完整的人,而皇帝,桑林等人各自利用工厂模式创造出灵魂,耳目,手臂等。女娲不必考虑灵魂,耳目,手臂是什么样子的,怎么创造出来的,这就成为了一个由建造者模式和工厂方法模式组合而成的系统。
使用建造者模式的场合和好处。
使用建造者模式的好处:
1.使用建造者模式可以使客户端不必知道产品内部组成的细节。
2.具体的建造者之间是相互独立的,对系统的扩展非常有利。
3.由于具体的建造者是独立的,因此可以对建造过程逐步细化,而不对其他的模块产生任何影响。
使用建造者模式的场合:
1.创建一些复杂的对象时,这些对象的内部组成构件间的建造顺序是稳定的,但是对象的内部组成构件面临着复杂的变化。
2.要创建的复杂对象的算法,独立于该对象的组成部分,也独立于组成部分的装配方法时。


目录

1. 意图:

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

2. 如何使用:

需要生产的对象具有复杂的内部结构。
需要生成的对象内部属性本身相互依赖。
分为三部分,建筑师类,抽象建筑类,产品类。

3. UML模板:

image

4. 关键代码:

Director director = new Director();
Builder builder = new ConcreteBuilder();
Product product = director.CreateProduct(builder);

5. 实例:


public class BuilderMode : MonoBehaviour
{
    void Start()
    {
        Director director = new Director();
        Builder builder = new ConcreteBuilder();
        Product product = director.CreateProduct(builder);
        product.Show();
    }
}
//建筑师
public class Director
{
    public Product CreateProduct(Builder builder)
    {
        builder.BuildPartA();
        builder.BuildPartB();
        return builder.GetResult();
    }
}
//建造虚拟类
public abstract class Builder
{
    public abstract void BuildPartA();
    public abstract void BuildPartB();
    public abstract Product GetResult();
}
//具体的建造者类
public class ConcreteBuilder : Builder
{
    private Product product = new Product();
    public override void BuildPartA()
    {
        product.Add("PartA");
    }
    public override void BuildPartB()
    {
        product.Add("PartB");
    }
    public override Product GetResult()
    {
        return product;
    }
}
//产品
public class Product
{
    IList<string> parts = new List<string>();
    public void Add(string part)
    {
        parts.Add(part);
    }
    public void Show()
    {
        Debug.Log("\n产品 创建 ----");
        foreach (string part in parts)
        {
            Debug.Log(part);
        }
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值