建造模式
来源:互联网 发布:老子 译本 知乎 编辑:程序博客网 时间:2024/06/02 13:32
有些情况下,一个对象会有一些重要的性质,在它们没有恰当的值之前,对象不能作为一个完整的产品使用。比如,一个电子邮件有发件人地址、收件人地址、主题、内容、附件等部分,而在最起码的收件人地址得到赋值之前,这个电子邮件不能发出。
还有些情况下,一个对象的一些性质必须按照某个顺序赋值才有意义。在某个性质没有赋值之前,另一个性质无法赋值。这些情况使得性质本身的建造涉及到复杂的商业逻辑。
建造模式非常适用于此种情况。建造模式利用一个导演者对象和具体建造者对象一个一个地建造出所有的零件,从而建造出完整的产品对象。建造者模式将产品的结构和产品的零件建造过程对客户端隐藏起来,把对建造过程进行指挥的责任和具体建造零件的责任分割开来,达到责任划分和封装的目的。
还有些情况下,一个对象的一些性质必须按照某个顺序赋值才有意义。在某个性质没有赋值之前,另一个性质无法赋值。这些情况使得性质本身的建造涉及到复杂的商业逻辑。
建造模式非常适用于此种情况。建造模式利用一个导演者对象和具体建造者对象一个一个地建造出所有的零件,从而建造出完整的产品对象。建造者模式将产品的结构和产品的零件建造过程对客户端隐藏起来,把对建造过程进行指挥的责任和具体建造零件的责任分割开来,达到责任划分和封装的目的。
package builder;
public interface Product ...{
public void showinfo();
}
package builder;
public class ProductA implements Product ...{
String part1 = null;
String part2 = null;
public void showinfo() ...{
System.out.println(part1);
System.out.println(part2);
}
}
package builder;
public class ProductB implements Product ...{
String part1 = null;
public void showinfo() ...{
System.out.println(part1);
}
}
package builder;
public interface Builder ...{
void buildPart1();
void buildPart2();
public Product getProduct();
}
package builder;
public class BuilderA implements Builder ...{
ProductA productA = new ProductA();
public void buildPart1() ...{
productA.part1="ProductA_part1";
}
public void buildPart2() ...{
productA.part2="ProductA_part2";
}
public Product getProduct() ...{
return productA;
}
}
package builder;
public class BuilderB implements Builder ...{
ProductB productB = new ProductB();
public void buildPart1() ...{
productB.part1="ProductB_part1";
}
public void buildPart2() ...{
}
public Product getProduct() ...{
return productB;
}
}
package builder;
public class Director ...{
Builder builder;
Product product;
public Product construct(String type) ...{
if (type!=null&&type.equals("A"))
builder = new BuilderA();
else
builder = new BuilderB();
builder.buildPart1();
builder.buildPart2();
product = builder.getProduct();
return product;
}
}
package builder;
public class Client ...{
public static void main(String[] args) ...{
Director director = new Director();
Product product = director.construct("A");
product.showinfo();
}
}
public interface Product ...{
public void showinfo();
}
package builder;
public class ProductA implements Product ...{
String part1 = null;
String part2 = null;
public void showinfo() ...{
System.out.println(part1);
System.out.println(part2);
}
}
package builder;
public class ProductB implements Product ...{
String part1 = null;
public void showinfo() ...{
System.out.println(part1);
}
}
package builder;
public interface Builder ...{
void buildPart1();
void buildPart2();
public Product getProduct();
}
package builder;
public class BuilderA implements Builder ...{
ProductA productA = new ProductA();
public void buildPart1() ...{
productA.part1="ProductA_part1";
}
public void buildPart2() ...{
productA.part2="ProductA_part2";
}
public Product getProduct() ...{
return productA;
}
}
package builder;
public class BuilderB implements Builder ...{
ProductB productB = new ProductB();
public void buildPart1() ...{
productB.part1="ProductB_part1";
}
public void buildPart2() ...{
}
public Product getProduct() ...{
return productB;
}
}
package builder;
public class Director ...{
Builder builder;
Product product;
public Product construct(String type) ...{
if (type!=null&&type.equals("A"))
builder = new BuilderA();
else
builder = new BuilderB();
builder.buildPart1();
builder.buildPart2();
product = builder.getProduct();
return product;
}
}
package builder;
public class Client ...{
public static void main(String[] args) ...{
Director director = new Director();
Product product = director.construct("A");
product.showinfo();
}
}
- 建造模式
- 建造模式
- 建造模式
- 建造模式
- 建造模式
- 建造模式
- 建造模式
- 建造模式
- 设计模式/建造模式
- 设计模式:建造模式
- 设计模式:建造模式
- 设计模式--建造模式
- 设计模式-建造模式
- 设计模式-建造模式
- 深入浅出建造模式
- 建造(Builder)模式
- Builder 建造者模式
- 建造(Builder)模式
- JDO、EJB/CMP、Hibernate和Amber的比较
- 一个超级强横的征婚启事
- 以前玩游戏时候的图片
- 关于难缠朋友
- Spring参考手册-第三章 IoC容器-3.2 基本概念-容器和Beans(豆子)
- 建造模式
- SQL Server日期格式的转换
- 别让优化搅乱你的代码
- 对MS的ID3DXEffect接口很是佩服a
- c#中过滤html的正则表达式
- 关于加强学生课外科技活动与实践能力的建议
- 起点的下午
- asp.net页面引入的js控件编码问题
- Python开发编码规范