zoukankan      html  css  js  c++  java
  • 设计模式学习总结2 创建型2 Builder生成器模式

    Builder生成器模式(创建型)

    作用:

    Builder生成器模式将生成复杂对象的具体过程和它的构造函数分离开,同样的构造过程可以实例出不同的对象。

    Role
    The Builder pattern separates the specification of a complex object from its actual construction. The same construction process can create different representations.

    设计:

    生成器接口IBuilder,定义要Build哪些内容
    实例对象控制器Director,包含一系列生成对象的操作
    生成器Builder,被实例化对象控制器Director调用来实例化对象
    对象Product,由多部分组成的对象

    举例:
    IBuilder   制造钢笔的一系列规范
    Director  使用BuilderA制造钢笔
    BuilderA  某种按IBuilder规范制造钢笔的方法
    Product   由多个零件组成的钢笔
    代码:

    代码

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;

    namespace Builder
    {
        using System;
        using System.Collections.Generic;
        using System.Text;
        using System.Reflection;

        namespace BuilderExemple
        {
            class Program
            {
                static void Main(string[] args)
                {
                    ComputerFactory factory = new ComputerFactory();
                    ComputerBuilder office = new OfficeComputerBuilder();
                    factory.BuildComputer(office);
                    office.Computer.ShowSystemInfo();
                    ComputerBuilder game = new GameComputerBuilder();
                    factory.BuildComputer(game);
                    game.Computer.ShowSystemInfo();
                }
            }

            class ComputerFactory
            {
                public void BuildComputer(ComputerBuilder cb)
                {
                    Console.WriteLine();
                    Console.WriteLine(">>>>>>>>>>>>>>>>>>Start Building " + cb.Name);
                    cb.SetupMainboard();
                    cb.SetupCpu();
                    cb.SetupMemory();
                    cb.SetupHarddisk();
                    cb.SetupVideocard();
                    Console.WriteLine(">>>>>>>>>>>>>>>>>>Build " + cb.Name + " Completed");
                    Console.WriteLine();
                }
            }

            abstract class ComputerBuilder
            {
                protected string name;

                public string Name
                {
                    get { return name; }
                    set { name = value; }
                }

                protected Computer computer;

                public Computer Computer
                {
                    get { return computer; }
                    set { computer = value; }
                }

                public ComputerBuilder()
                {
                    computer = new Computer();
                }

                public abstract void SetupMainboard();
                public abstract void SetupCpu();
                public abstract void SetupMemory();
                public abstract void SetupHarddisk();
                public abstract void SetupVideocard();
            }

            class OfficeComputerBuilder : ComputerBuilder
            {
                public OfficeComputerBuilder()
                {
                    name = "OfficeComputer";
                }

                public override void SetupMainboard()
                {
                    computer.Mainboard = "Abit升技 LG-95C 主板 (Intel 945GC芯片组/LGA 775/1066MHz) ";
                }

                public override void SetupCpu()
                {
                    computer.Cpu = "Intel 英特尔赛扬D 336 (2.8GHz/LGA 775/256K/533MHz)  ";
                }

                public override void SetupMemory()
                {
                    computer.Memory = "Patriot博帝 DDR2 667 512MB 台式机内存";
                }

                public override void SetupHarddisk()
                {
                    computer.Harddisk = "Hitachi日立 SATAII接口台式机硬盘 (80G/7200转/8M)盒装";
                }

                public override void SetupVideocard()
                {
                    computer.Videocard = "主板集成";
                }
            }

            class GameComputerBuilder : ComputerBuilder
            {
                public GameComputerBuilder()
                {
                    name = "GameComputer";
                }

                public override void SetupMainboard()
                {
                    computer.Mainboard = "GIGABYTE技嘉 GA-965P-DS3 3.3 主板(INTEL P965 东莞产)";
                }

                public override void SetupCpu()
                {
                    computer.Cpu = "Intel 英特尔酷睿2 E4400 (2.0GHz/LGA 775/2M/800MHz)盒装";
                }

                public override void SetupMemory()
                {
                    computer.Memory = "G.SKILL 芝奇 F2-6400CL5D-2GBNQ DDR2 800 1G*2台式机内存";
                }

                public override void SetupHarddisk()
                {
                    computer.Harddisk = "Hitachi日立 SATAII接口台式机硬盘 (250G/7200转/8M)盒装";
                }

                public override void SetupVideocard()
                {
                    computer.Videocard = "七彩虹 逸彩8600GT-GD3 UP烈焰战神 H10 显卡 (GeForce 8600GT/256M/DDR3)支持HDMI!";
                }
            }

            class Computer
            {
                private string videocard;

                public string Videocard
                {
                    get { return videocard; }
                    set { videocard = value; }
                }

                private string cpu;

                public string Cpu
                {
                    get { return cpu; }
                    set { cpu = value; }
                }

                private string mainboard;

                public string Mainboard
                {
                    get { return mainboard; }
                    set { mainboard = value; }
                }

                private string memory;

                public string Memory
                {
                    get { return memory; }
                    set { memory = value; }
                }

                private string harddisk;

                public string Harddisk
                {
                    get { return harddisk; }
                    set { harddisk = value; }
                }

                public void ShowSystemInfo()
                {
                    Console.WriteLine("==================SystemInfo==================");
                    Console.WriteLine("CPU:" + cpu);
                    Console.WriteLine("MainBoard:" + mainboard);
                    Console.WriteLine("Memory:" + memory);
                    Console.WriteLine("VideoCard:" + videocard);
                    Console.WriteLine("HardDisk:" + harddisk);
                    Console.ReadLine();
                }
            }
        }
    }

    使用场景:

    创建对象的各个组成部分的算法是可以分离的;
    组合起来的对象可能会有不同的表现
    需要控制对象的构造过程

    Use the Builder pattern when…
    •  The algorithm for creating parts is independent from the parts themselves.
    •  The object to be assembled might have different representations.
    •  You need fine control over the construction process.

    总结:

    Builder生成器模式是一种创建型模式,它主要是应对项目中一些复杂对象的创建工作。所谓“复杂对象”,是指:此对象中还含有其它的子对象。Builder模式应有的情景:复杂对象的各个部分的子对象可以用一定的算法构成;由于需求的变化,这个复杂对象的各个部分经常面临着剧烈的变化,但是将各个部分的子对象组合在一起的算法却相对稳定。简单的说:子对象变化较频繁,对组合子对象算法相对稳定。
        这是解决一个复杂对象的创建工作,现在变化的部分和相对稳定的部分已经明确,我们要做的是隔离变化,如何将子对象和算法隔离是要解决的问题。
        《设计模式》中说道:将一个复杂对象的构建与其表示向分离,使得同样的构建过程可以创建不同的表示。Builder模式的几个要点:
        1、用于构建一个复杂的对象,但这个对象构建的算法是稳定的,对象中的各个部分经常变化。
        2、在于应对复杂对象各个部分的频繁需求变动。但是难以应对算法的需求变动。这点一定要注意,如果用复杂对象的内部子对象的组合算法不稳定,使用Builder会带来很多不必要的麻烦。

  • 相关阅读:
    java继承中的初始化顺序
    java可访问修饰符
    java简单数据类型转化
    java运算符优先级
    面向切面编程的例子
    什么是面向切面编程
    return 的使用
    通过修改my.ini配置文件来解决MySQL 5.6 内存占用过高的问题
    spring 注入使用注解(不用xml)
    spring在扫描包中的注解类时出现Failed to read candidate component错误
  • 原文地址:https://www.cnblogs.com/utopia/p/1675244.html
Copyright © 2011-2022 走看看