欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

设计模式之建造者

程序员文章站 2022-05-04 22:22:52
...

 

/**
 * 建造者模式:将一个复杂的对象的构建与它的表示分离,使得同样的构建过程可以有不同的表示。
 * 建造者模式通常包括以下这几个角色:
    1、Builder:给出一个抽象接口,规范建造者对于生产的产品的各个组成部分的建造。这个接口只是定一个规范,不涉及具体的建造,具体的建造让继承于它的子类(ConcreteBuilder)去实现。
    2、ConcreteBuilder:实现builder接口,针对不同的商业逻辑,具体化各对象部分的建造,最后返回一个建造好的产品。
    3、Director:导演,顾名思义,负责规范流程之用。在指导中不涉及产品的创建,只负责保证复杂对象各部分被创建或按某种顺序创建。
    4、Product:复杂对象。
 *
 *使用建造者模式的好处
   1.使用建造者模式可以使客户端不必知道产品内部组成的细节。
    2.具体的建造者类之间是相互独立的,对系统的扩展非常有利。
    3.由于具体的建造者是独立的,因此可以对建造过程逐步细化,而不对其他的模块产生任何影响。
 *例如:   造桌子
 */
//桌子: 对象之间解耦合
public class Product {
 private Desktop desktop; //桌面
 private Deskleg deskleg; //桌腿
 
 public static void main(String args[]){
  
  //对于客户端而言,只需要关心具体的建造者,无需关心产品内部构建流程
  Builder builder = new Builder();
  Director director = new Director(builder);
  // 指挥者负责流程把控
  director.construct();
  // 建造者返回一个组合好的复杂产品对象
  Product desk = builder.getDesk();
 }

 public Desktop getDesktop() {
  return desktop;
 }

 public void setDesktop(Desktop desktop) {
  this.desktop = desktop;
 }

 public Deskleg getDeskleg() {
  return deskleg;
 }

 public void setDeskleg(Deskleg deskleg) {
  this.deskleg = deskleg;
 }
}

class Desktop{
 private int length;
 private int width;
 
 public int getLength() {
  return length;
 }
 public void setLength(int length) {
  this.length = length;
 }
 public int getWidth() {
  return width;
 }
 public void setWidth(int width) {
  this.width = width;
 }
}

class Deskleg{
 private int length; //长
 private int width;  //宽
 private int height; //高
 public int getLength() {
  return length;
 }
 public void setLength(int length) {
  this.length = length;
 }
 public int getWidth() {
  return width;
 }
 public void setWidth(int width) {
  this.width = width;
 }
 public int getHeight() {
  return height;
 }
 public void setHeight(int height) {
  this.height = height;
 }
}

public class Director {
 private AbstractBuilder builder;
 
 public Director(AbstractBuilder builder){
  this.builder = builder;
 }
 
 // 这个方法用来规范流程,产品构建和组装方法
    public void construct() {
        builder.buildDesktop();
        builder.buildDeskleg();
    }
}

public class Builder extends AbstractBuilder {
 private Product product;
 
 public Builder(){
  product = new Product();
 }

 //建造桌面
 void buildDesktop() {
  Desktop desktop = new Desktop();
  desktop.setLength(100);
  desktop.setWidth(80);
  
  product.setDesktop(desktop);
 }
 
 //建造桌腿
 void buildDeskleg() {
  Deskleg deskleg = new Deskleg();
  deskleg.setHeight(120);
  deskleg.setLength(10);
  deskleg.setWidth(10);
  
  product.setDeskleg(deskleg);
 }
 
 public Product getDesk(){
  return product;
 }
}

public abstract class AbstractBuilder {
 abstract void buildDesktop();
 abstract void buildDeskleg();
}

相关标签: 建造者模式