博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
BuilderPattern(23种设计模式之一)
阅读量:5101 次
发布时间:2019-06-13

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


设计模式六大原则(1):单一职责原则 设计模式六大原则(2):里氏替换原则 设计模式六大原则(3):依赖倒置原则 设计模式六大原则(4):接口隔离原则 设计模式六大原则(5):迪米特法则 设计模式六大原则(6):开闭原则

BuilderPattern,UML抽象图百度找,代码实现如下

使用生成器模式设计一个构造复杂类的过程。

抽象生成器

package BuilderPattern;public interface IVehicleBuilder {    public void buildPartA();    public void buildPartB();    public Product getProduct();}

具体生成器

package BuilderPattern.ConcreteBuilder;import BuilderPattern.IVehicleBuilder;import BuilderPattern.Product;public class ConcreteBuilder1 implements IVehicleBuilder {    private Product product = new Product();    public void buildPartA() {        // TODO Auto-generated method stub        product.addPart("PartA");    }    public void buildPartB() {        // TODO Auto-generated method stub        product.addPart("PartB");    }    public Product getProduct() {        // TODO Auto-generated method stub        if(product!=null)            return product;        else            return null;    }    }
package BuilderPattern.ConcreteBuilder;import BuilderPattern.IVehicleBuilder;import BuilderPattern.Product;public class ConcreteBuilder2 implements IVehicleBuilder {    private Product product = new Product();    public void buildPartA() {        // TODO Auto-generated method stub        product.addPart("PartX");    }    public void buildPartB() {        // TODO Auto-generated method stub        product.addPart("PartY");    }    public Product getProduct() {        // TODO Auto-generated method stub        if(product!=null)            return product;        else            return null;    }}

指导者

package BuilderPattern;public class Director {     public void construct(IVehicleBuilder builder){         builder.buildPartA();         builder.buildPartB();     }}

具体产品

package BuilderPattern;import java.util.ArrayList;public class Product {    private ArrayList
product = new ArrayList
(); public void addPart(String partName){ product.add(partName); } public void showProduct(){ for (String part : product) { System.out.println(part); } }}

测试类

package BuilderPattern;import BuilderPattern.ConcreteBuilder.ConcreteBuilder1;import BuilderPattern.ConcreteBuilder.ConcreteBuilder2;public class Test {    public static void main(String[] args) {                // TODO Auto-generated method stub         Director director=new Director();     //指导者,指导具体生成器构造产品         /*          * 生成AB          * */         IVehicleBuilder concreteBuilder1=new ConcreteBuilder1();         director.construct(concreteBuilder1);         Product product1=concreteBuilder1.getProduct();         product1.showProduct();         /*          * 生成XY          * */         IVehicleBuilder concreteBuilder2=new ConcreteBuilder2();         director.construct(concreteBuilder2);         Product product2=concreteBuilder2.getProduct();         product2.showProduct();     }}

在实际的软件系统中,各个子部分对象完全有可能通过相应的工厂方法来生成,然后再交由生成器按照特定的构建算法将其组装成一个完整的“复杂对象”。


生成器模式的本质:分离整体构建算法和部件构造表示。构建一个复杂对象,需要将整体的构建过程与复杂对象子部件的构建过程分离开来,这样才能使得程序结构更松散、易扩展,复用性好,同样也会使代码逻辑更清晰,意图更明显。生成器模式的重心还是在于分离整体构建算法与子部件的构建,分步骤构建对象只不过是整体构建算法的一个简单表现,或者说是一个附带产物。


别嫌弃我没写注释,这个代码很简单,注释省略,嘿嘿。

转载于:https://www.cnblogs.com/1996jiwei/p/6490819.html

你可能感兴趣的文章
django之多表查询-2
查看>>
快速幂
查看>>
改善C#公共程序类库质量的10种方法
查看>>
AIO 开始不定时的抛异常: java.io.IOException: 指定的网络名不再可用
查看>>
MyBaits动态sql语句
查看>>
HDU4405(期望DP)
查看>>
拉格朗日乘子法 那些年学过的高数
查看>>
vs code 的便捷使用
查看>>
Spring MVC @ResponseBody返回中文字符串乱码问题
查看>>
用户空间与内核空间,进程上下文与中断上下文[总结]
查看>>
JS 中的跨域请求
查看>>
JAVA开发环境搭建
查看>>
mysql基础语句
查看>>
Oracle中的rownum不能使用大于>的问题
查看>>
[Data Structure & Algorithm] 有向无环图的拓扑排序及关键路径
查看>>
cassandra vs mongo (1)存储引擎
查看>>
Visual Studio基于CMake配置opencv1.0.0、opencv2.2
查看>>
Vue音乐项目笔记(三)
查看>>
遍历Map对象
查看>>
计算剪贴板里仿制的代码行数
查看>>