### 建造者模式
将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。(摘抄)
通俗来说就是你只需要指定创建的类型是什么,创建的过程不变,就可以得到不同的表示对象。
使用建造者模式首先定义一个产品类,然后通过产品类知道需要具体建造哪些部分,然后创建建造者类,定义好创建的抽象方法,再创建具体建造者类,实现具体的内容,最后创建一个指挥者类,来指挥建造过程.
~~~
import javax.naming.directory.DirContext;
class Product
{
a,b,c;
public void show()
{
System.out.println(a+b+c);
}
}
abstract class Builder
{
public abstract void BuilderA();
public abstract void BuilderB();
public abstract void BuilderC();
public abstract Product getProduct();
}
class ConcreteBuilder1 extends Builder
{
private Product product = new Product();
@Override
public void BuilderA()
{
product.a = 功能3;
}
@Override
public void BuilderB() {
// TODO Auto-generated method stub
product.b = 功能4;
}
@Override
public void BuilderC() {
// TODO Auto-generated method stub
product.c = 功能5;
}
@Override
public Product getProduct() {
// TODO Auto-generated method stub
return product;
}
}
class ConcreteBuilder2 extends Builder
{
private Product product = new Product();
@Override
public void BuilderA() {
// TODO Auto-generated method stub
product.a = 功能6;
}
@Override
public void BuilderB() {
// TODO Auto-generated method stub
product.b = 功能7;
}
@Override
public void BuilderC() {
// TODO Auto-generated method stub
product.c = 功能8;
}
@Override
public Product getProduct() {
// TODO Auto-generated method stub
return product;
}
}
class Director
{
public void Construct(Builder builder)
{
builder.BuilderA();
builder.BuilderB();
builder.BuilderC();
}
}
class Client
{
public static void main()
{
Director director = new Director();
ConcreteBuilder1 b1 = new ConcreteBuilder1();
ConcreteBuilder2 b2 = new ConcreteBuilder2();
director.Construct(b1);
Product p1 = b1.getProduct();
director.Construct(b1);
Product p2 = b2.getProduct();
}
}
~~~
建造者模式把创建对象时装配的代码隐藏起来了,当创建新的对象的时候不需要了解创建的过程,只需要知道需要创建哪一种对象即可。
建造者模式创建的对象一般都是内部结构的建造顺序通常时稳定的,但对象内部的构建通常面临者许多变化。
同时用建造者模式创建复杂的对象,在给其添加功能时可以节约很多代码,相当于把很多重复的代码写到了具体的创建类中,同时需要增加具有新功能的对象的时候只需要再多写一个具体建造者类就可以了。
### 总结
建造者模式是在当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时适用的模式。(摘抄)
当使用建造建议灵活使用,不要呆板的去套用这个规则,例如这个对象在整个程序中都只需要创建一次,那就没有必要再去把它抽象成这种建造者模式了。
- 前言
- (1)代码无错就是优?——简单工厂模式
- (2)商场促销——策略模式
- (3)&(4)&(5) 设计模式原则
- (6)穿什么有这么重要?——装饰模式
- (7)为别人做嫁衣——代理模式
- (8)雷锋依然在人间——工厂方法模式
- (9)简历复印——原型模式
- (10)考题抄错会做也白搭——模板方法模式
- (11)迪米特法则
- (12)牛市股票还会亏钱?—— 外观模式
- (13)好菜每回味不同——建造者模式
- (14)老板回来,我不知道——观察者模式
- java实现事件委托
- (15)就不能不还DB吗?—— 抽象工厂模式
- (16)无尽加班何时休息——状态模式
- (17)在NBA我需要翻译——适配器模式
- (18)如果再回到从前——备忘录模式
- (19)分公司=部门——组合设计模式
- (20)想走?可以!先买票——迭代器模式
- (21)有些类也需计划生育——单例模式
- (22)手机软件何时统一——桥接模式
- (23)烤羊肉串引来的思考——命令模式
- (24)加薪非要老总批?——职责链模式
- (25)世界需要和平——中介者模式
- (26)项目多也别傻做——享元模式
- (28)男人和女人——访问者模式