每天有两个小时要在地铁上度过,打发枯燥的坐车时间唯有看书。最近在看经典大作大话设计模式,其中的编程思想带给我很大的震撼。
每天学习一个设计模式(建造者模式)
建造者模式概述:
建造则(Builder Pattern)也叫做生成器模式,提供一种“封装机制”来隔离出"复杂对象的各个部分"的变化,从而保持"稳健构建算法"不随着需求改变而改变。
(将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示.)
在建造者模式中,有如下四个角色:
Product产品类:
通常是实现了模板方法模式,也就是有模板方法和基本方法。
Builder抽象建造者:
规范产品的组建,一般是由子类实现。
ConcreteBuilder具体建造者
实现抽象类定义的所有方法,并返回一个组件好的对象。
Director导演
负责安排已有模块的顺序,然后告诉Builder开始创建。
代码清单:
public class Product { IListparts = new List (); public void Add(string str) { parts.Add(str); } public void Show() { Console.WriteLine("\n产品创建-----"); foreach (string item in parts) { Console.WriteLine(item); } } } public abstract class Builder { public abstract void BuilderPartA(); public abstract void BuilderPartB(); public abstract Product GetResult(); } class ConcreteBuilder1 : Builder { private Product product = new Product(); public override void BuilderPartA() { product.Add("部件A"); } public override void BuilderPartB() { product.Add("部件B"); } public override Product GetResult() { return product; } } public class ConcerteBulider2 : Builder { private Product product = new Product(); public override void BuilderPartA() { product.Add("部件X"); } public override void BuilderPartB() { product.Add("部件Y"); } public override Product GetResult() { return product; } } public class Director { public void Construct(Builder builder) { builder.BuilderPartA(); builder.BuilderPartB(); } }
static void Main(string[] args) { Director director = new Director(); Builder b1 = new ConcreteBuilder1(); Builder b2 = new ConcerteBulider2(); director.Construct(b1); Product p1 = b1.GetResult(); p1.Show(); director.Construct(b2); Product p2 = b2.GetResult(); p2.Show(); }
总结:建造者模式的实质是解耦组装过程和创建具体部件,使得我们不关心每个部件是如何组装的。
建造者模式的奥妙在于Builder将构建次序交给Director类按照次序构建所需的组件。
相关模式
抽象工厂:重点是工厂模式(简单或者复杂工厂),而建造者模式重点是由简单模式构建复杂对象。
复合模式:经常被用来构建复杂模式。