设计模式之创建型模式---建造者模式

一、建造者模式简介

建造者模式(Builder Pattern)原理在于将一个复杂的问题分解为多个细小的问题,每个细小的问题则是一个对象,然后通过这些小对象构建成为复杂问题这个大的对象。也可以理解为这些小对象是一个单独的元器件,我们通过这些元器件进行不同的组合构建成不同且复杂的物体。

在建造者模式中通过一个指挥者来判断客户端需要创建目标类型。

建造者模式的优点:
1、独立的创建每个对象,易于扩展功能

2、局限性强产品必须有共同点

二、建造者模式的实现

1、建造者模式的实现模型

Builder是一个抽象的接口类它涵盖了一个对象的所有组成部分的抽象接口,ConcreteBuilder是一个Builder接口的具体实现类。

product 则是一个使用接口创建出的具体产品。

Director是一个指挥者,它根据客户端的不同需求而创建不同的Product。

建造者模式的代码实现:

using System;
using System.Collections.Generic;

abstract class Builder
{
    public abstract void BuiderPatyA ();
    public abstract void BuiderPatyB ();
    public abstract Product GetResult ();
}

class Product
{
    IList<string> parts = new List<string> ();

    public void Add(string part)
    {
        parts.Add (part);
    }

    public void Show()
    {
        foreach(string part in parts)
        {
            Console.WriteLine (parts);
        }
    }
}


class ConcreteBuilder1 :Builder
{
    private Product part = new Product ();
    public override void BuiderPatyA ()
    {
        Console.WriteLine ("SHI XIAN LE FANG AN A");
    }

    public override void BuiderPatyB ()
    {
        Console.WriteLine ("SHI XIAN LE FANG AN B");
    }

    public override Product GetResult ()
    {
        return part;
    }
}


class ConcreteBuilder2 :Builder
{
    private Product part = new Product ();
    public override void BuiderPatyA ()
    {
        Console.WriteLine ("SHI XIAN LE FANG AN X");
    }

    public override void BuiderPatyB ()
    {
        Console.WriteLine ("SHI XIAN LE FAGN AN Y");
    }

    public override Product GetResult ()
    {
        return part;
    }
}

class Director
{
    public void Construct(Builder buider)
    {
        buider.BuiderPatyA ();
        buider.BuiderPatyB ();
    }
}

class WinMain
{
    public  static void Main(string[] args)
    {
        Director director = new Director ();

        Builder b1 = new ConcreteBuilder1 ();
        Builder b2 = new ConcreteBuilder2 ();

        director.Construct (b1);
        Product patrA = b1.GetResult ();
        patrA.Show ();

        director.Construct (b2);
        Product patrB = b2.GetResult ();
        patrA.Show ();

        Console.ReadKey ();
    }
}

运行结果:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值