设计模式-建造者模式

举报
AAAI 发表于 2021/05/05 00:39:40 2021/05/05
【摘要】 建造者属于创建者模式。 建造者模式 FactoryBuilder,创建型模式。将复杂对象的构建与它的表示分离。工厂模式是造零件,建造者模式是进行组装。同样的建造过程有不同的表示。 主要结构图: 抽象的建造者 public abstract class Builder{ abstract void buildA(); // 零件 // 产品 abstract...

建造者属于创建者模式。

建造者模式

FactoryBuilder,创建型模式。将复杂对象的构建与它的表示分离。工厂模式是造零件,建造者模式是进行组装。同样的建造过程有不同的表示。

主要结构图:
在这里插入图片描述

抽象的建造者

public abstract class Builder{ abstract void buildA(); // 零件 // 产品
	abstract Product getProduct();  // 产品里有零件的具体设置,getter/setter方法 
}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5

具体的建造者:工人,worker是builder的具体实现, 一个builder可能有几个不同的worker

public class Worker extends Builder{ private Product prodeuct; // 声明产品 public Worker(){ prodeuct = new Product(); // 工人创造产品 } @Override void buildA(){ product.setBuildA("xx"); } @Override Product getProduct(){ return null; }
}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

指挥(导演类):核心,负责指挥构建一个工程。

public class Director{ // 指挥工人按照顺序建房子,安装顺序的改变,返回完整产品类 public Product build(Builder builder){ builder.bulidA(); return builder.getProduct(); }
}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

测试

public class Test{ public static void main(String[] args){ Director director = new Director(); Product build = director.build(new Worker()); }
}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

简化

使用静态内部类,实现零件无序构造,省掉指挥者,让用户进行DIY。

步骤:

抽象的建造者

public abstract class Builder{ abstract Builder buildA(String msg); // 零件,返回具体的实现类,这是返回父类名。 // 目的使用XX.A().B();  这两个.是用A返回值作为对象来调用B方法。 // 产品 abstract Product getProduct();  // 产品里有零件的具体设置,getter/setter方法,也有buildA的默认返回值,即两个set方法,一个有参,一个无参。
}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

具体的建造者:工人,worker是builder的具体实现, 一个builder可能有几个不同的worker

public class Worker extends Builder{ private Product prodeuct; // 声明产品 public Worker(){ prodeuct = new Product(); // 工人创造产品 } @Override Builder buildA(String msg){ product.setBuildA(msg); return this; // this是worker } @Override Product getProduct(){ return null; }
}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

测试

public class Test{ public static void main(String[] args){ Worker worker = new Worker(); Product product = worker.buildA("xx").getProduct(); // XX.A().B(); 链式编程 }
}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

建造者和抽象工厂

springsecurity用到

建造者是完整产品,抽象工厂是产品族,一系列产品

建造者是通过指挥者进行生产对象,不直接调用相关方法,抽象工厂是当客户需要调用工厂方法进行获取实例对象。

建造者是进行汽车组装工厂,抽象工厂是汽车配件生产工厂,生产一个产品族的产品。

建造者和工厂模式应用场景

建造者模式唯一区别于工厂模式的是针对复杂对象的创建。也就是说,如果创建简单对象,通常都是使用工厂模式进行创建,而如果创建复杂对象,就可以考虑使用建造者模式。

参考:建造者模式(Bulider模式)详解

文章来源: blog.csdn.net,作者:αβγθ,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/weixin_38022166/article/details/116405698

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。