Java设计模式Android开发经验谈Android开发

建造者模式

2018-04-09  本文已影响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. 易于拓展
    怎家新的具体建造者无需修改原有类库的代码,易于拓展,符合开闭原则

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

缺点:

应用场景

总结

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

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

上一篇下一篇

猜你喜欢

热点阅读