建造者模式是一种创建型设计模式(有的也称之为生成器模式), 使你能够分步骤创建复杂对象。 该模式允许你使用相同的创建代码生成不同类型和形式的对象。
场景:盖房子,房子都有房顶、四面墙壁、窗户和门,可以使用不同的材料,例如,第一个建造者使用木头和玻璃,第二个建造者使用石头和钢铁。在调用一组步骤后,第一个建造者得到的是一栋普通房屋,第二栋得到的是一栋城堡
使用代码简单实现一下:
声明创建房屋通用步骤的接口
public interface IHouseBuilder { void buildWall(); void buildRoof(); void buildWindow(); void buildDoor(); void buildResult(); }
创建具体建造者,继承接口并实现
public class House : IHouseBuilder { public void buildDoor() { Console.WriteLine("装房门"); } public void buildResult() { Console.WriteLine("普通木屋"); } public void buildRoof() { Console.WriteLine("盖房顶"); } public void buildWall() { Console.WriteLine("盖墙壁"); } public void buildWindow() { Console.WriteLine("安装窗户"); } }
创建指挥者,用于构建和组织步骤
public class HouseDirector { public void Construct(IHouseBuilder houseBuilder) { houseBuilder.buildWall(); houseBuilder.buildWall(); houseBuilder.buildWindow(); houseBuilder.buildDoor(); } }
客户端调用
static void Main(string[] args) { HouseDirector houseDirector = new HouseDirector(); Console.WriteLine("------------------盖一栋普通木屋------------------"); IHouseBuilder houseBuilder1 = new House(); houseDirector.Construct(houseBuilder1); houseBuilder1.buildResult(); Console.WriteLine("------------------盖一栋城堡------------------"); IHouseBuilder houseBuilder2 = new Tower(); houseDirector.Construct(houseBuilder2); houseBuilder2.buildResult(); Console.WriteLine("Press Any Key to end!"); Console.ReadKey(); }
输出结果
源代码仓库地址:https://github.com/luchong0813/DesignModel