`

设计模式之建造者模式

阅读更多

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

 

通用类图如下:

 



 

建造模式中主要有如下四个角色:

Prodct产品类:

产品便是建造中的复杂对象

 

抽象建造者:

给出一个或多个抽象接口,规范产品的组件,有子类实现具体组建方法

 

具体建造者:

通常是实现了抽象建造者的方法,并且返回一个组建好的对象

 

Director导演类:

负责安排已有的模块顺序,然后告诉建造者开始建造

 

/**
 *
 * 产品类
 *
 */
public class Product {

}

 

/**
 * 抽象建造者
 */
public abstract class AbstractBuilder {

    // 规范组建逻辑
    protected abstract void bulidPart();

    // 返回建造好的产品
    protected abstract Product createProduct();

}

 

/**
 * 具体的建造者
 * 
 */
public class ConcreteBuilder extends AbstractBuilder {

    /**
     * 
     * @see com.huashao.chapter.chapter11.AbstractBuilder#bulidPart()
     */
    @Override
    protected void bulidPart() {
        // TODO Auto-generated method stub

    }

    /**
     * @return
     * @see com.huashao.chapter.chapter11.AbstractBuilder#createProduct()
     */
    @Override
    protected Product createProduct() {
        // TODO Auto-generated method stub
        return new Product();
    }

}

 

/**
 * 
 * 导演类
 * 
 */
public class Director {

    private AbstractBuilder builder = new ConcreteBuilder();

    public Product buildProduct() {

        builder.bulidPart();

        return builder.createProduct();
    }
}

 

 

建造者模式的使用场景:

1.相同的方法不同的执行顺序,产生不同的结果是可以使用建造者模式

2.多个部件或零件,都可以组装到一个对象中,但是产生的运行结果不相同

2.产品类非常复杂或者产品类中的调用顺序不同产生了不同的效果

 

建造者模式的应用:

小明留级了N年后终于考上大学了,小明报考了计算机专业,因为这个专业可以打Dota,小明跟爸爸说,计算机专业没有电脑不行(多么合理的理由啊保密),小明爸爸就给了小明5000块钱,小明拿着钱去电子城转了一圈发现如果买现成的电脑都在5000元以上,小明跟爸爸说现在5000块钱买不了电脑,小明爸爸说:滚!这下可把小明愁坏了,舍友看到小明在唉声叹气就问发生什么事,小明就把情况更舍友说了一下,舍友说:你可以组装一台电脑啊,我这就要去电子城组装电脑,一起去吧。小明和舍友想电子城飞奔而去........下面上类图

 




 
 

电脑主要评价指标:CPU,硬盘、显示器、内存

 

 

/**
 * 
 * 电脑
 * 
 */
public class Computer {

    private String cpu;

    // 硬盘
    private String disk;

    // 内存
    private String memory;

    // 显示器
    private String display;
    
    

    public Computer() {
    }

    /**
     * @param cpu
     * @param disk
     * @param memory
     * @param display
     */
    public Computer(String cpu, String disk, String memory, String display) {
        this.cpu = cpu;
        this.disk = disk;
        this.memory = memory;
        this.display = display;
    }

    public String getCpu() {
        return cpu;
    }

    public void setCpu(String cpu) {
        this.cpu = cpu;
    }

    public String getDisk() {
        return disk;
    }

    public void setDisk(String disk) {
        this.disk = disk;
    }

    public String getMemory() {
        return memory;
    }

    public void setMemory(String memory) {
        this.memory = memory;
    }

    public String getDisplay() {
        return display;
    }

    public void setDisplay(String display) {
        this.display = display;
    }

}

 

/**
 * 组装电脑的抽象类
 * 
 */
public abstract class BuliderPC {

    protected Computer computer;
    // 选择CPU的品牌
    protected abstract void bulidCpu(String cpu);

    // 组装显示器,输入显示器的品牌
    protected abstract void bulidDisplay(String display);

    // 组装内存条
    protected abstract void bulidMemory(String memory);

    // 组装硬盘
    protected abstract void bulidDisk(String disk);

    // 组装电脑
    protected abstract Computer bulidComputer();
}

 

/**
 * 
 * 
 */
public class ConcreteBulidPc extends BuliderPC {

    public ConcreteBulidPc() {
        computer = new Computer();
    }

    /**
     * @param cpu
     */
    @Override
    protected void bulidCpu(String cpu) {

        computer.setCpu(cpu);
    }

    /**
     * @param display
     */
    @Override
    protected void bulidDisplay(String display) {

        computer.setDisplay(display);
    }

    /**
     * @param memory
     */
    @Override
    protected void bulidMemory(String memory) {

        computer.setMemory(memory);
    }

    /**
     * @param disk
     */
    @Override
    protected void bulidDisk(String disk) {

        computer.setDisk(disk);
    }

    /**
     * @return
     */
    @Override
    protected Computer bulidComputer() {
        // TODO Auto-generated method stub
        return computer;
    }

}

 

/**
 * 
 * 导演类
 * 
 */
public class Director {

    private BuliderPC bulider;

    public Director() {
        bulider = new ConcreteBulidPc();
    }

    public Computer bulidComputer(String cpu, String disk, String memory, String display) {

        bulider.bulidCpu(cpu);
        bulider.bulidDisk(disk);
        bulider.bulidMemory(memory);
        bulider.bulidDisplay(display);

        return bulider.bulidComputer();
    }

}

 

小明和舍友到达电子城,小明跟组装电脑的老板说:老板给你5000块钱给我组装个苹果电脑....老板说:你是小明吧?我从小就看你的笑话....

 

public class Client {

    public static void main(String[] args) {
       
        Director director=new Director();
        
      Computer xiaoming=director.bulidComputer("Apple", "xxx", "xxx", "apple retina");
      
      Computer sheyou=director.bulidComputer("sony", "xxxx", "xxx", "samsung");
      
    }
}

 

其实组装电脑这件事用建造者感觉有点不合适,因为我们完全可以new一个电脑然后挨个赋值吐舌头

 

  • 大小: 23.1 KB
  • 大小: 65.7 KB
  • 大小: 65.5 KB
分享到:
评论

相关推荐

    C#设计模式之建造者模式

    建造者模式是软件设计模式中的一种,主要用于将复杂的对象构建过程与对象的使用分离,使得同样的构建过程可以创建不同的表示。在C#中,我们可以通过类的继承和接口的使用来实现这一模式。以下是关于“C#设计模式之...

    设计模式之建造者模式代码示例

    建造者模式(Builder Pattern)是软件工程中一种用于创建对象的抽象工厂方法,它将复杂的构建过程分解为一系列步骤,使得构建过程可以独立于其表示进行。这种模式允许客户端使用相同的构建过程创建不同表现形式的...

    [创建型模式]设计模式之建造者模式(Builder Pattern)

    【创建型模式】设计模式之建造者模式(Builder Pattern) 建造者模式(Builder Pattern)是设计模式中的一个创建型模式,它提供了一种方法来分步骤构造复杂的对象,使得构造过程和表示分离,使得同样的构建过程可以...

    原创:设计模式之建造者模式生动实例

    建造者模式,是设计模式中的一种创建型模式,它的核心思想是将复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。在Java编程中,这种模式经常用于生成对象,特别是当对象的创建过程较为复杂时,...

    设计模式——建造者模式

    建造者模式是一种结构型设计模式,它允许我们分步骤创建复杂对象,而无需暴露构建过程的内部细节。这种模式在Java编程中非常常见,尤其是在处理需要多种构建方式或需要隔离对象构造过程的场景。 建造者模式的核心...

    Java创建型设计模式之建造者模式详解.rar

    建造者模式是软件设计模式中的一种,属于创建型模式,它的主要目的是将对象的构建过程与表示分离,使得相同的构建过程可以创建不同的表示。在Java中,建造者模式经常用于构造复杂对象,通过一步一步地创建对象,使得...

    设计模式之建造者Builder模式

    **建造者模式(Builder Pattern)**是软件设计模式中的一种,属于创建型模式。它将复杂对象的构建过程与它的表示分离,使得同样的构建过程可以创建不同的表示。建造者模式通常用于那些需要大量构造参数的对象,通过...

    Java设计模式之建造者模式实例详解

    "Java设计模式之建造者模式实例详解" 本文主要介绍了Java设计模式之建造者模式,结合具体实例形式分析了建造者模式的概念、原理、实现方法与相关使用注意事项。 建造者模式的概念 建造者模式(Builder Pattern)...

    C#设计模式之建造者模式实例:各大佬打造取经人,观音找到光头的唐三藏和中分的悟空

    在建造者模式中,有以下几个角色: 产品(Product):表示被构建的复杂对象。通常包含多个部分或组件。 抽象建造者(Builder):定义构建产品的抽象接口,包含创建和组装产品的方法。 具体建造者(Concrete Builder...

    Python设计模式之建造者模式实例详解

    本文实例讲述了Python设计模式之建造者模式。分享给大家供大家参考,具体如下: 建造者模式(Builder Pattern):将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示 下面是一个建造者模式的...

    JavaScript设计模式之建造者模式实例教程

    本文实例讲述了JavaScript设计模式之建造者模式。分享给大家供大家参考,具体如下: 一、建造者模式模式概念 建造者模式可以将一个复杂的对象的构建与其表示相分离,使得同样的构建过程可以创建不同的表示。也就是说...

    设计模式-建造者模式

    建造者模式(Builder Pattern)是一种创建型设计模式,它提供了一种方法来分步骤构建复杂的对象,使得构建过程和表示分离,使得同样的构建过程可以创建不同的表示。这种模式经常在对象的构造过程中需要进行多种选择...

    Java设计模式-建造者模式详解

    Java设计模式-建造者模式详解 Java设计模式-建造者模式详解将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。生成器模式(Builder)是使用多个“小型”工厂来最终创建出一个完整对象。...

    JAVA设计模式之建造者模式原理与用法详解

    JAVA设计模式之建造者模式原理与用法详解 一、概述 JAVA设计模式之建造者模式是创建型模式的一种,它将复杂对象的构造与它的实现相分离,让相同的构建过程可以创建不同的对象。这使得建造者模式非常适合复杂对象的...

    C#设计模式之建造者(Builder)模式示例源代码

    其中,建造者模式属于创建型模式,主要用于解决构建复杂对象的问题。 ### 建造者模式解析 建造者模式的核心思想是将一个复杂的对象分解为多个简单的组成部分,然后通过一个构建者来组装这些部分。这样做的好处是...

    设计模式例子,观察者模式,建造者模式

    在给定的压缩包文件中,"设计模式例子,观察者模式,建造者模式" 提到了两种重要的设计模式:观察者模式(Observer Pattern)和建造者模式(Builder Pattern)。下面我们将深入探讨这两种设计模式的概念、应用场景、...

    设计模式实验报告-建造者

    建造者模式是一种软件设计模式,属于创建型模式之一,主要用于解决创建复杂对象的问题。在实际应用中,当对象的构造过程过于复杂,涉及到多个属性或者子对象的组合时,直接通过构造函数创建可能会导致代码混乱、难以...

Global site tag (gtag.js) - Google Analytics