现实中的例子,比如配置食盐溶液的问题:100g的水中添加40g食盐,然后将配好的食盐溶液倒掉70g后加水100g,最后再加食盐15g,求最后配好的实验溶液的实验含量百分比。
这个例子用Builder模式实现,Builder决定表现形式,并提供增减食盐,增减水等方法。Director决定配制食盐溶液的过程。用下面的程序实现。
//类:食盐水,有两个属性:salt,water;构造函数决定食盐和水的量。
public class SaltWater
{
public SaltWater(double water, double salt)
{
this._salt = salt;
this._water = water;
}
public double salt
{
get { return _salt; }
set { _salt = value; }
}
public double water
{
get { return _water; }
set { _water = value; }
}
private double _salt;
private double _water;
}
//接口Builder,决定表现形式。有个接口
public interface Builder
{
void addSolute(int soluteAmount);//添加溶剂
void addSoluvent(int solventAmount);//添加溶质
void abandonSolution(int solutionAmount);//倒掉一部分溶液
SaltWater getResult();//取得配置溶液。
}
//类Director,决定生成过程。
public class Director
{
private Builder builder;
public Director(Builder builder)//构造函数:生成表现形式。
{
this.builder = builder;
}
public void constract()//配置本例食盐水的过程。
{
builder.addSoluvent(100);
builder.addSolute(40);
builder.abandonSolution(70);
builder.addSoluvent(100);
builder.addSolute(15);
}
}
//实现接口Builder,食盐水。
public class SaltWaterBuilder: Builder
{
private SaltWater saltWater;
public SaltWaterBuilder(){
this.saltWater = new SaltWater(0,0);
}
public void addSolute(int saltAmount){
saltWater.salt += saltAmount;
}
public void addSoluvent(int waterAmount){
saltWater.water += waterAmount;
}
public void abandonSolution(int saltWaterAmount){
saltWater.salt *= 1 - saltWaterAmount / (saltWater.salt + saltWater.water);
saltWater.water *= 1 - saltWaterAmount / (saltWater.salt + saltWater.water);
}
public SaltWater getResult(){
return this.saltWater;
}
}
//Test
public static void Main()
{ //创建表现形式
Builder builder = new SaltWaterBuilder();
//创建生产过程。
Director dir = new Director(builder);
//生产
dir.constract();
//取得生产结果,配置好的食盐水。
SaltWater saltWater = (SaltWater)builder.getResult();
Console.Write(saltWater.salt/saltWater.water * 100 +"%");
}
执行结果:
24.7058823529412%
没有评论:
发表评论