建造者模式

作者: 死磕自己 | 来源:发表于2018-04-09 08:39 被阅读31次

建造者模式

hello world.png

《目录》

未命名文件.png

UML类图:

未命名文件 (2).png

介绍:

1、将一个复杂对象的构建与它表示分离,使得童谣的构建过程可以创建不同的表示

2、主要作用

 1、 用户只需要给出指定复杂对象的类型和内容;
2、建造者模式负责按顺序创建复杂对象(把内部的建造过程和细节都隐藏起来)

3、解决的问题

  • 方便用户创建复杂的对象(不需要知道实现过程)
  • 代码的复用性&封装性(将对象构建过程和细节进行封装&复用)

实例

接下来我们用一个例子来说明以上给大家讲解的问题和内容

相信大家很多人都玩过《魔兽世界3 冰封王座》,不知道大家记不记得《建房子模式》,我们可以选择建房造小兵,英雄,然后带着大部队干掉对面。

分析分析:


    1、背景: 我们开始建造房子,小兵,英雄,攻打对面
    
    2、过程:
            1、我们(client)开始 和  游戏模式(Diretor)沟通  寻找 建造的需求
            2、了解需求后,我们把我们需要的小兵和英雄以及房子分为各个部件(Builder)的请求(金币 、 木材 、 时间)
            3、指挥建房子的农民(ConcreateBuilder) 去构建组件
            4、将组件组长成游戏模式需要的,开始建造 成功建造为房子(Product)

开始步骤

  1. 步骤一
public abstract class Builder {

   // 第一步 : 挖矿 得金币
   // 声明为抽象方法,具体由子类事项
   public abstract void GetGold();

   // 第二步: 砍树
   // 声明为抽象方法,具体由子类事项
   public abstract void GetTree();
   
   // 第三部 等待时间建造
   // 声明为抽象方法,具体由子类事项
   public abstract void WaitTime();
   
   //返回房子的方法 : 获得建造好的房子
   public abstract House GetHouse();
}

  1. 步骤二

    public class Director {
    
     //指挥农民假造房屋
     public void construct(Builder builder){
         builder.GetGold();
         builder.GetTree();
         builder.WaitTime();
     }
    }
    
    

  2. 步骤三

    public class House {
     
     //House组件的集合
        private List<String> parts = new ArrayList<String>();
    
     public void ADD(String string) {
         // TODO Auto-generated method stub
         parts.add(string);
     }
    
     public  void show() {
         for (int i = 0; i < parts.size(); i++) {
             System.out.println("组件:"+parts.get(i)+"已经有了");
         }
         System.out.println("房子建造完成,请继续");
     }
    }
    
  3. 步骤四

public class ConcreateBuilder extends Builder {

  //创建产品实例
  House house = new House();

  
  //建造产品
  @Override
  public void GetGold() {
      // TODO Auto-generated method stub
      house.ADD("挖矿得金币");
  }

  @Override
  public void GetTree() {
      // TODO Auto-generated method stub
      house.ADD("砍树得木材");
  }

  @Override
  public void WaitTime() {
      // TODO Auto-generated method stub
      house.ADD("等待建造完成的时间");
  }

  @Override
  public House GetHouse() {
      // TODO Auto-generated method stub
      
      return house;
  }
  
  
  
}
  1. 步骤五
public class  palyer {

 public static void main(String[] args) {
     
     //开始打开游戏
     //找到希望玩的种族
       Director director = new Director();
       Builder builder = new ConcreateBuilder();

     //沟通需求后,我们开始进行游戏
     director.construct(builder);

     //东西都搞定了
     House house = builder.GetHouse();
     //把房子建造出来
     house.show();
 }
}

结果

组件:挖矿得金币已经有了
组件:砍树得木材已经有了
组件:等待建造完成的时间已经有了
房子建造完成,请继续

通过上述的例子,我相信大家多少都有一点了解,可能我的这个例子不是特别的适合,但是这也是我想到的一些经验和分享,希望大家可以结合自己的例子来自己分析一遍,谢谢

优缺点

在概念和例子解析完成后,我们来分析一下其中的优缺点:

优点

  1. 易于解耦
    将产品本身与产品创建的过程进行解耦,可以使用相同的创建过程来得到不同的产品,也就说细节以来抽象

  2. 易于精确控制对象的创建
    将复杂产品的创建步骤分解在不同的方法中,使得创建过程更加清晰

  3. 易于拓展
    怎家新的具体建造者无需修改原有类库的代码,易于拓展,符合开闭原则

    每一个具体建造这都相对独立,而与其他的具体建造无关,因此可以很方便的替换具体建造者或增加新的具体建造者,用户使用不同的具体建造者即可得到不同的产品对象。
    

缺点:

  • ​ 建造者模式所创建的产品一般具有较多的共同点,起组成部分相似;如果产品之间的差异性很大,则不适合使用建造者模式,因此起适用范围受到一定的限制。
  • 如果产品的内部变化复杂,可能导致需要定义很多具体建造者类来实现这种变化,导致系统变得很庞大。

应用场景

  • 需要生成的产品对象有复杂的内部结构,这些产品对象具备共性;
  • 隔离复杂对象的创建和使用,并使得相同的创建过程可以创建不同的产品。

总结

希望大家可以好好的探索,以自身的例子为例来好好的学习我们这个建造者模式。感谢大家!!

又想到一个例子,希望有空可以看一看

相关文章

  • Builder Pattern in Java

    建造者模式:建造者模式定义建造者模式应用场景实现案例Jdk中的建造者模式建造者模式的优点建造者模式的缺点 建造者模...

  • 设计模式(4) 建造者模式

    什么是建造者模式 经典建造者模式的优缺点 对建造者模式的扩展 什么是建造者模式 建造者模式将一个复杂的对象的构建与...

  • 建造者模式(部件构造)

    目录 建造者模式的理念 从 POJO 到建造者模式的思考 怎么来实现建造者模式 建造者模式在Android源码中的...

  • 【设计模式】之建造者Builder模式

    建造者模式 什么是建造者模式? 建造者模式属于创建型模式的一员,可以控制对象的实例化过程。建造者模式简化了复杂对象...

  • 建造者模式

    一、建造者模式介绍 二、建造者模式代码实例

  • 建造者模式

    建造者模式 首先,建造者模式的封装性很好。使用建造者模式可以有效的封装变化,在使用建造者模式的场景中,一般产品类和...

  • 建造者模式:深入理解建造者模式 ——组装复杂的实例

    目录: 一 建造者模式介绍 1.1 定义 1.2 为什么要用建造者模式(优点)? 1.3 哪些情况不要用建造者模式...

  • 设计模式之建造者模式

    设计模式之建造者模式 Intro 简介 建造者模式: 建造者模式隐藏了复杂对象的创建过程,它把复杂对象的创建过程加...

  • 一、设计模式(构建模式)——03建造模式与原型模式

    建造者模式 建造型模式用于创建过程稳定,但配置多变的对象。 建造模式的实现要点: 在建造者模式中,指挥者是直接与客...

  • 创建型模式:建造者模式

    个人公众号原文:创建型模式:建造者模式 五大创建型模式之四:建造者模式。 简介 姓名 :建造者模式 英文名 :Bu...

网友评论

    本文标题:建造者模式

    本文链接:https://www.haomeiwen.com/subject/jtjbhftx.html