博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
设计模式--建造者模式
阅读量:6930 次
发布时间:2019-06-27

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

  建造者模式(builder),将一个复杂对象的构建与他的表示分离,使得同样的构建过程可以创建不同的表示。

1 package com.sun.builder; 2  3 import java.util.ArrayList; 4 import java.util.List; 5  6 /** 7  * 产品类 由多个部件组成 8  *  9  * @author sunafei10  * 11  */12 public class Product {13     List
parts = new ArrayList
();14 15 public void add(String part) {
//添加产品部件16 this.parts.add(part);17 }18 19 public void show() {
//列举所有产品部件20 System.out.println("产品创建");21 for (String part : parts) {22 System.out.println(part);23 }24 }25 }
1 package com.sun.builder; 2  3 /** 4  * 抽象建造者类,确定产品有两个部件组成,并声明一个得到产品建造后结果的方法getResult 5  * @author SunAFei 6  * 7  */ 8 public abstract class Builder { 9     public abstract void builderPartA();10 11     public abstract void builderPartB();12     13     public abstract Product getResult();14 }
1 package com.sun.builder; 2  3 /** 4  * 具体建造者类 5  * @author SunAFei 6  * 7  */ 8 public class ConcreteBuilder1 extends Builder { 9 10     Product product = new Product();11 12     @Override13     public void builderPartA() {14         product.add("A");15     }16 17     @Override18     public void builderPartB() {19         product.add("B");20     }21 22     @Override23     public Product getResult() {24         return product;25     }26 27 }
1 package com.sun.builder; 2  3 public class ConcreteBuilder2 extends Builder { 4  5     Product product = new Product(); 6  7     @Override 8     public void builderPartA() { 9         product.add("X");10     }11 12     @Override13     public void builderPartB() {14         product.add("Y");15     }16 17     @Override18     public Product getResult() {19         return product;20     }21 22 }
package com.sun.builder;/** * 指挥者类 * @author SunAFei * */public class Director {        public void construct(Builder builder) {
//指挥建造过程 builder.builderPartA(); builder.builderPartB(); }}
1 package com.sun.builder; 2  3 public class BuilderDemo { 4  5     public static void main(String[] args) { 6         Director director = new Director(); 7         Builder b1 = new ConcreteBuilder1(); 8         Builder b2 = new ConcreteBuilder2(); 9         10         director.construct(b1);11         Product p1 = b1.getResult();//客户不需要知道具体的建造过程12         p1.show();13         14         director.construct(b2);15         Product p2 = b2.getResult();16         p2.show();17     }18 19 }

 

转载于:https://www.cnblogs.com/sun-space/p/5727626.html

你可能感兴趣的文章
GT-Scan2: Bringing Bioinformatics to Alibaba Cloud
查看>>
Java类的初始化顺序
查看>>
揭秘天猫双11背后:2500万超高清直播的“硬实力”
查看>>
微软这次开源的是 Windows 计算器
查看>>
App Store被拒绝后的解决方案中心
查看>>
RHEL 8 删除 MongoDB
查看>>
linux中数据库的安装 增删改查
查看>>
SpringBoot 整合 oauth2(五)实现 jwt 及 扩展
查看>>
Kafka与Redis比较
查看>>
SpringBoot启动抛出Unregistering JMX-exposed beans on shutdown异常
查看>>
努力吧!钢铁侠!
查看>>
JavaScript机器学习之线性回归
查看>>
详解:淘宝大秒杀系统是如何设计的?
查看>>
良好的代码格式反映了程序员的编码能力,好的程序员应该这么编码
查看>>
标准模板库(STL)学习指南之map映射
查看>>
【Python】动手分析天猫内衣售卖数据,得到你想知道的信息!
查看>>
设计模式四: 抽象工厂(Abstract Factory)
查看>>
概率问题,从癌症检测到贝叶斯网络
查看>>
简单说说Kafka中的时间轮算法
查看>>
【多线程】-ThreadPool线程池
查看>>