建造者模式的理解

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了建造者模式的理解相关的知识,希望对你有一定的参考价值。

  将一个复杂的对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示的意图时,我们需要应用于一个设计模式,“建造者(Builder)模式”,又叫生成器模式。建造者模式可以将一个产品的内部表象与产品的生成过程 分割开来,从而可以使一个建造过程生成具有不同的内部表象的产品对象。如果我们用了建造者模式,那么用户就只需要建造的类型就可以得到它们,而具体建造的过程和细节就不需要知道了。--《大话设计模式》

技术分享图片

 1 /**
 2  * 产品
 3  */
 4 public class Computer {
 5     private String cpu;
 6     private String mainboard;
 7 
 8     public String getCpu() {
 9         return cpu;
10     }
11 
12     public void setCpu(String cpu) {
13         this.cpu = cpu;
14     }
15 
16     public String getMainboard() {
17         return mainboard;
18     }
19 
20     public void setMainboard(String mainboard) {
21         this.mainboard = mainboard;
22     }
23 }
 1 /**
 2  * 是为创建一个Computer对象的各个部件指定的抽象接口
 3  */
 4 public interface IBuilderComputer {
 5     //创建cpu
 6     void buildCpu();
 7     //创建主板
 8     void buildMainbord();
 9 
10     //交付电脑
11     Computer deliverComputer();
12 }
 1 /**
 2  * 具体的建造者,实现接口,构造和装配各个部件
 3  */
 4 public class ConcreteBuilderComputer implements IBuilderComputer {
 5     private Computer computer=new Computer();
 6     @Override
 7     public void buildCpu() {
 8         computer.setCpu("CPU创建成功");
 9     }
10 
11     @Override
12     public void buildMainbord() {
13         computer.setMainboard("主板创建成功");
14     }
15 
16     /**
17      * 向用户交付电脑
18      * @return
19      */
20     @Override
21     public Computer deliverComputer() {
22         return computer;
23     }
24 }
 1 **
 2  * 负责人(指挥人)是构建一个使用Builder接口的对象
 3  * 根据用户的需求组装电脑
 4  */
 5 public class Director {
 6     private IBuilderComputer builder;
 7 
 8     public Director(IBuilderComputer builderComputer){
 9         this.builder=builderComputer;
10     }
11 
12     /**
13      * 将CPU和主板装在一起
14      */
15     public void construct(){
16         builder.buildCpu();
17         builder.buildMainbord();
18     }
19 }
 1 public class Client {
 2     public static void main(String[] args) {
 3         IBuilderComputer builderComputer=new ConcreteBuilderComputer();
 4         Director director=new Director(builderComputer);
 5         director.construct();
 6         Computer computer=builderComputer.deliverComputer();
 7         System.out.println("运行"+computer.getCpu());
 8         System.out.println("运行"+computer.getMainboard());
 9     }
10 }

 

在什么情况下使用建造模式

  1. 需要生成的产品对象有复杂的内部结构,每一个内部成分本身可以是对象,也可以仅仅是一个对象(即产品对象)的一个组成部分。

  2. 需要生成的产品对象的属性相互依赖。建造模式可以强制实行一种分步骤进行的建造过程,因此,如果产品对象的一个属性必须在另一个属性被赋值之后才可以被赋值,使用建造模式是一个很好的设计思想。

  3. 在对象创建过程中会使用到系统中的其他一些对象,这些对象在产品对象的创建过程中不易得到。

以上是关于建造者模式的理解的主要内容,如果未能解决你的问题,请参考以下文章

关于建造者模式的个人理解

设计模式之建造者模式

建造者模式的理解

深入理解设计模式-建造者模式(生成器模式)

深入理解设计模式-建造者模式(生成器模式)

建造者模式——结合案例,通俗易懂