设计模式-建造者模式
2016-03-31 10:34
239 查看
建造者模式可以让客户端不必知道产品的内部组成细节,只要知道产品类型即可创建出产品,将产品的使用和创建过程解耦,使得相同创建过程可以创建不同的产品对象
建造者模式一共有4个角色:
复杂产品类
抽象创建者
具体创建者
指挥者
//建造者模式
//复杂产品
public class Car
{
private string Wheel;
private string Bulb;
private string Gps;
public string GetWheel() { return Wheel; }
public void SetWheel(string Wheel) { this.Wheel= Wheel; }
public string GetBulb() { return Bulb; }
public void SetBulb(string Bulb) { this.Bulb = Bulb; }
public string GetGps() { return Gps; }
public void SetGps(string Gps) { this.Gps = Gps; }
}
//抽象创建者
public abstract class ACarBuilder
{
protected Car car=new Car();
public abstract void BuildWheel();
public abstract void BuildBulb();
public abstract void BuildGps();
public Car CreateCar()
{
return car;
}
}
//具体创建者(大众汽车)
public class VWCarBuilder : ACarBuilder
{
public override void BuildBulb()
{
car.SetBulb("普通白炽灯");
}
public override void BuildGps()
{
car.SetBulb("普通Gps");
}
public override void BuildWheel()
{
car.SetBulb("公路轮胎");
}
}
//具体创建者(宝马汽车)
public class BMWCarBuilder : ACarBuilder
{
public override void BuildBulb()
{
car.SetBulb("太阳能环保护眼灯泡");
}
public override void BuildGps()
{
car.SetGps("高级Gps(支持电子罗盘)");
}
public override void BuildWheel()
{
car.SetWheel("高性能轮胎");
}
}
//指挥者
public class CarDirector
{
public static Car Construct(ACarBuilder builder)
{
//指导各部件的创建顺序
builder.BuildBulb();
builder.BuildWheel();
builder.BuildGps();
return builder.CreateCar();
}
}
class Program
{
static void Main(string[] args)
{
//建造者模式要求创建的产品具有较多共同点,如果组成部分相差很大,则不适合
//主要适用于:
//1.产品对象有复杂的内部结果,包含多个属性,
//2.产品内部的属性相互依赖,需要制定其生成顺序(通过创建者实现)
Car car = CarDirector.Construct(new BMWCarBuilder());//可更改为从读取配置文件
Console.WriteLine("Bulb=>" + car.GetBulb());
Console.WriteLine("Gps=>" + car.GetGps());
Console.WriteLine("Wheel=>" + car.GetWheel());
}
}
建造者模式一共有4个角色:
复杂产品类
抽象创建者
具体创建者
指挥者
//建造者模式
//复杂产品
public class Car
{
private string Wheel;
private string Bulb;
private string Gps;
public string GetWheel() { return Wheel; }
public void SetWheel(string Wheel) { this.Wheel= Wheel; }
public string GetBulb() { return Bulb; }
public void SetBulb(string Bulb) { this.Bulb = Bulb; }
public string GetGps() { return Gps; }
public void SetGps(string Gps) { this.Gps = Gps; }
}
//抽象创建者
public abstract class ACarBuilder
{
protected Car car=new Car();
public abstract void BuildWheel();
public abstract void BuildBulb();
public abstract void BuildGps();
public Car CreateCar()
{
return car;
}
}
//具体创建者(大众汽车)
public class VWCarBuilder : ACarBuilder
{
public override void BuildBulb()
{
car.SetBulb("普通白炽灯");
}
public override void BuildGps()
{
car.SetBulb("普通Gps");
}
public override void BuildWheel()
{
car.SetBulb("公路轮胎");
}
}
//具体创建者(宝马汽车)
public class BMWCarBuilder : ACarBuilder
{
public override void BuildBulb()
{
car.SetBulb("太阳能环保护眼灯泡");
}
public override void BuildGps()
{
car.SetGps("高级Gps(支持电子罗盘)");
}
public override void BuildWheel()
{
car.SetWheel("高性能轮胎");
}
}
//指挥者
public class CarDirector
{
public static Car Construct(ACarBuilder builder)
{
//指导各部件的创建顺序
builder.BuildBulb();
builder.BuildWheel();
builder.BuildGps();
return builder.CreateCar();
}
}
class Program
{
static void Main(string[] args)
{
//建造者模式要求创建的产品具有较多共同点,如果组成部分相差很大,则不适合
//主要适用于:
//1.产品对象有复杂的内部结果,包含多个属性,
//2.产品内部的属性相互依赖,需要制定其生成顺序(通过创建者实现)
Car car = CarDirector.Construct(new BMWCarBuilder());//可更改为从读取配置文件
Console.WriteLine("Bulb=>" + car.GetBulb());
Console.WriteLine("Gps=>" + car.GetGps());
Console.WriteLine("Wheel=>" + car.GetWheel());
}
}
相关文章推荐
- 你是不也在愁没数据?来看看Open Data吧!
- IO读取
- Block - 7
- Android 手机获取测试
- Odoo8模块中增加延时自动消失的提示
- Linux下面安装Mysql说明
- 从svn上更新下来的代码报错
- iOS - UITextField输入错误的震动动画
- html中offsetTop、clientTop、scrollTop、offsetTop各属性介绍
- 使用Aspose.Pdf将MemoryStream转换为PDF
- C# string类型(引用类型)
- cocos2dx 3.3 + lua 学习笔记(01)--- math库
- 200个好玩html5游戏源码(捕鱼达人,植物大战僵尸,超级玛丽,五子棋,象棋,切水果.....)
- php array_mutisort
- Java 使用poi导入excel,结合xml文件进行数据验证的例子(增加了jar包)
- webform连接ACCESS数据库
- E QUERY [thread1] TypeError: db.foo.batchInsert is not a function :
- Can't import name symbol_database
- 图标跟随鼠标
- SDAU课程练习 2 1003