设计模式之建造者

 

/**
 * 建造者模式:将一个复杂的对象的构建与它的表示分离,使得同样的构建过程可以有不同的表示。
 * 建造者模式通常包括以下这几个角色:
    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();
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值