对于许久不用的东西,容易忘记。百度许久,也未能找到自己所要。 从今日起,有些东西就记载下来,不仅方便自己,希望能帮到他人吧!
定义:
建造者模式是设计模式的一种,将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
使用场景:
1 创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式。
2 构造过程必须允许被构造的对象有不同表示。
-建造者模式,有以下几个角色:
1 builder:为创建一个产品对象的各个部件指定抽象接口。
2 ConcreteBuilder:实现Builder的接口以构造和装配该产品的各个部件,定义并明确它所创建的表示,并提供一个检索产品的接口。
3 Director:构造一个使用Builder接口的对象。
4 Product:表示被构造的复杂对象。ConcreteBuilder创建该产品的内部表示并定义它的装配过程,包含定义组成部件的类,包括将这些部件装配成最终产品的接口。
今天不是讲述植物大战僵尸的详细大码开发,只是借助开发流程,理顺建造者模式。请谅解,不过奉上植物大战僵尸的视频+源码。
PVZ 开发流程
1.创建植物,僵尸抽象方法,相当于builder。
2.植物大战僵尸,相当于Product。
3.领导点名程序员A负责,相当于Director。
4.程序员A负责开发植物大战僵尸,相当于ConcreteBuilder。
5.客户使用。
package com.example.yancy.model.BuilderPattern;
/**
* 创建日期:2018/8/29 0029 on 10:05
* 描述:1.创建植物,僵尸抽象方法,相当于builder
* 作者: yancy
*/
public abstract class Builder {
public abstract void builderPlant();
public abstract void builderZombie();
}
package com.example.yancy.model.BuilderPattern;
import java.util.ArrayList;
import java.util.List;
/**
* 创建日期:2018/8/29 0029 on 10:06
* 描述:2.<<植物大战僵尸>>,相当于Product。
* 作者: yancy
*/
public class Product {
//植物大战僵尸中的元素
private List<String> elements = new ArrayList<>();
//将元素放入到植物大战僵尸中
public void put(String part){
elements.add(part);
}
public void show(){
for (int i = 0;i<elements.size();i++){
System.out.println("元素:"+elements.get(i)+"准备就绪");
}
System.out.println("植物大战僵尸开发完成");
}
}
package com.example.yancy.model.BuilderPattern;
/**
* 创建日期:2018/8/29 0029 on 10:06
* 描述:3.领导点名程序员A负责,相当于Director。
* 作者: yancy
*/
public class Director {
//领导点名程序员A负责,开发植物大战僵尸
public void develop(Builder builder){
builder. builderPlant();
builder.builderPlant();
}
}
package com.example.yancy.model.BuilderPattern;
/**
* 创建日期:2018/8/29 0029 on 10:05
* 描述: 4.程序员A负责开发植物大战僵尸,相当于ConcreteBuilder。
* 作者: yancy
*/
public class ConcreteBuilder extends Builder{
private Product product;
public ConcreteBuilder(){}{
product=new Product();
}
@Override
public void builderPlant() {
product.put("食人花");
}
@Override
public void builderZombie() {
product.put("巨型僵尸");
}
public Product getProduct() {
return product;
}
}
@Test
public void testBuilder(){
//客户需要植物大战僵尸
//领导人
Director director = new Director();
//程序员A
ConcreteBuilder builder = new ConcreteBuilder();
//沟通需求后,领导人叫程序原A开发PVZ
director.develop(builder);
//开发完成
Product product = builder.getProduct();
//客户看到植物大战僵尸
product.show();
}
以上就是建造者模式的大致流程,如果有更好的请提出你的宝贵意见,或者指正我的错误。