博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
模式9.建造者模式-Java
阅读量:4033 次
发布时间:2019-05-24

本文共 2568 字,大约阅读时间需要 8 分钟。

1.定义:

将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示

  • 将一个产品的内部表象与产品的生成过程分割开来,从而可以使一个建造过程生成具有不同的内部表象的产品对象。
  • 使用建造者模式,用户只需指定需要建造的类型就可以得到他们,而具体的建造过程和细节就不需知道了

2.应用场景

让建造过程固定,建造细节可变、所以定义抽象类,固定建造过程。

让具体类去继承抽象类,实现具体类的建造需求。

指挥者指导对象的建造过程,根据用户的选择一步一步构建,隔离用户和建造过程的关联。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hu6zlE0n-1620538693623)(image-20210509110716725.png)]

  • 主要用于创建一些复杂的对象,这些对象的内部构建间的建造顺序通常是稳定的,但对象内部的构建通常面临着复杂的变化。

    当创建复杂对象的算法(指挥者)应该独立于该对象的组成部分(具体类)以及他们的装配方式(父类)时适用。

  • 好处: 使得建造代码与表示代码分离,因为建造者模式隐藏了产品是如何组装的,所以如果需要改变一个产品的内部表示,只需要再定义一个具体的建造者就好了。

3.助理解代码

3.1产品类,由多个部件组成

package com.builder;import java.util.ArrayList;import java.util.List;public class Product {
//产品类,由多个部件构成 List
parts=new ArrayList
(); //添加部件 public void add(String part){
parts.add(part); } //列举所以的部件 public void show(){
System.out.println("产品创建中...."); for (String s:parts){
System.out.println(s); } }}

3.2 Builer类,抽象建造者,确定产品由几个部件构成,并且声明得到产品建造后结果的方法

package com.builder;//抽象建造者类: 确定产品由哪些部件组成,并且声明一个得到产品建造后结果的方法public abstract  class Builder {
public abstract void BuilderPartA(); public abstract void BuilderPartB(); public abstract Product Getresult();}

3.3 具体建造者类1

package com.builder;//具体建造者类public class ConcreteBuilder1 extends Builder{
private Product product=new Product(); @Override public void BuilderPartA() {
product.add("部件A"); } @Override public void BuilderPartB() {
product.add("部件B"); } @Override public Product Getresult() {
return product; }}

3.4具体建造者类2

package com.builder;public class ConcreteBuilder2 extends Builder{
private Product product=new Product(); @Override public void BuilderPartA() {
product.add("部件X"); } @Override public void BuilderPartB() {
product.add("部件Y"); } @Override public Product Getresult() {
return product; }}

3.5指挥者类

package com.builder;//指挥者类public class Director {    public void Construct(Builder builder){        builder.BuilderPartA();        builder.BuilderPartB();    }}

3.6客户端类

package com.builder;//客户端不需知道具体的建造过程public class Client {    public static void main(String[] args) {        Director director=new Director();        Builder b1=new ConcreteBuilder1();        Builder b2=new ConcreteBuilder2();        director.Construct(b1);        Product p1=b1.Getresult();        p1.show();        director.Construct(b2);        Product p2=b2.Getresult();        p2.show();    }}

3.6 运行结果

产品创建中....部件A部件B产品创建中....部件X部件Y

转载地址:http://bvfdi.baihongyu.com/

你可能感兴趣的文章
Java的对象驻留
查看>>
logback高级特性使用(二) 自定义Pattern模板
查看>>
JVM并发机制探讨—内存模型、内存可见性和指令重排序
查看>>
可扩展、高可用服务网络设计方案
查看>>
如何构建高扩展性网站
查看>>
微服务架构的设计模式
查看>>
持续可用与CAP理论 – 一个系统开发者的观点
查看>>
nginx+tomcat+memcached (msm)实现 session同步复制
查看>>
c++字符数组和字符指针区别以及str***函数
查看>>
c++类的操作符重载注意事项
查看>>
c++模板与泛型编程
查看>>
STL::deque以及由其实现的queue和stack
查看>>
WAV文件解析
查看>>
DAC输出音乐2-解决pu pu 声
查看>>
WPF中PATH使用AI导出SVG的方法
查看>>
WPF UI&控件免费开源库
查看>>
QT打开项目提示no valid settings file could be found
查看>>
Win10+VS+ESP32环境搭建
查看>>
Ubuntu+win10远程桌面
查看>>
flutter-实现圆角带边框的view(android无效)
查看>>