先来一个例子
建造者接口 public interface IBuilder { void CreateLogo(); void CreateBody(); void CreateWheel(); void CreateChair(); }
宝马和大奔子类继承
public class Benz : IBuilder { public void CreateLogo() { Console.WriteLine("创建奔驰的logo"); } public void CreateBody() { Console.WriteLine("创建奔驰的身体"); } public void CreateWheel() { Console.WriteLine("创建奔驰的轮子"); } public void CreateChair() { Console.WriteLine("创建奔驰的椅子"); } }
public class BMW : IBuilder { public void CreateLogo() { Console.WriteLine("创建宝马的logo"); } public void CreateBody() { Console.WriteLine("创建宝马的身体"); } public void CreateWheel() { Console.WriteLine("创建宝马的轮子"); } public void CreateChair() { Console.WriteLine("创建宝马的椅子"); } }
Director 主管
public class Director1 { public void Constructor(IBuilder builder) { builder.CreateLogo(); builder.CreateBody(); builder.CreateWheel(); builder.CreateChair(); } }
Main 客户端
static void Main(string[] args) { Director1 director = new Director1(); director.Constructor(new Benz()); director.Constructor(new BMW()); Console.ReadLine(); }
建造者模式:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
建造者模式包含如下角色:
Builder:抽象建造者
ConcreteBuilder:具体建造者
Director:指挥者
Product:产品角色
建造者模式的结构中还引入了一个指挥者类Director,该类的作用主要有两个:
一、它隔离客户与生产过程;
二、它负责控制产品的生成过程。指挥者针对抽象建造者编程,客户端只需要知道具体建造者的类型,无须关心产品对象的具体组装过程,即可通过指挥者类调用建造者的相关方法,返回一个完整的产品对象。