基本介绍:
建造者模式又叫生成器模式,是一种对象构建模式。它可以将复杂对象的建造过程抽象出来(抽象类别),使这个抽象过程的不同实现方法可以构造出不同表现(属性)的对象建造者模式是一步一步建造一个复杂对象,它允许用户只通过指定复杂对象的类型和内容就可以建造他们,用户不需要指定内部的具体构建细节
建造者模式四个角色:
Product(产品角色):一个具体的产品对象
Builder(抽象建造者):创建一个Product对象的各个部件指定的接口/抽象类
ConcreteBuilder(具体建造者):实现接口,构建和装配各个部件
Director(指挥者):构建一个使用Builder的对象,它主要是用于创建一个复杂的对象,它主要有两个作用,一是:隔离了客户与对象的生产过程,二是:负责控制产品对象的生产过程
需求
我们有一款手机需要定制,需要经过芯片制作,电池制作,外壳制作,组装等,而且手机的厂商不是唯一一个,这个时候我们就需要用到建造者模式
首先我们需要一个产品手机
public class Phone {
/**
* 电池
*/
private String cell;
/**
* 芯片
*/
private String slug;
/**
* 手机壳
*/
private String phoneShell;
public String getCell() {
return cell;
}
public void setCell(String cell) {
this.cell = cell;
}
public String getSlug() {
return slug;
}
public void setSlug(String slug) {
this.slug = slug;
}
public String getPhoneShell() {
return phoneShell;
}
public void setPhoneShell(String phoneShell) {
this.phoneShell = phoneShell;
}
}
抽象的手机制作商
public abstract class PhoneBuilder {
protected Phone phone = new Phone();
/**
* 制造芯片
*/
public abstract void makeCell();
/**
* 制造电池
*/
public abstract void makeSlug();
/**
* 制造手机壳
*/
public abstract void makePhoneShell();
public Phone assemblePhone(){
return phone;
}
}
具体的手机制作商 比如华为,苹果
/**
* 华为制造商
*/
public class HuaweiPhoneBuilder extends PhoneBuilder{
@Override
public void makeCell() {
System.out.println("制造麒麟9200芯片");
}
@Override
public void makeSlug() {
System.out.println("制造6000ma电池");
}
@Override
public void makePhoneShell() {
System.out.println("制造米亚白手机壳");
}
}
/**
* 苹果制造商
*/
public class IPhoneBuilder extends PhoneBuilder{
@Override
public void makeCell() {
System.out.println("制造A17芯片");
}
@Override
public void makeSlug() {
System.out.println("制造苹果电池");
}
@Override
public void makePhoneShell() {
System.out.println("制造苹果手机壳");
}
}
然后我们需要一个指挥者,根据市场需求制作那款手机
public class PhoneDerector {
private PhoneBuilder phoneBuilder;
public PhoneDerector(PhoneBuilder phoneBuilder) {
this.phoneBuilder = phoneBuilder;
}
public void setHouseBuilder(PhoneBuilder phoneBuilder){
this.phoneBuilder=phoneBuilder;
}
public Phone createPhone(){
phoneBuilder.makeCell();
phoneBuilder.makeSlug();
phoneBuilder.makePhoneShell();
return phoneBuilder.assemblePhone();
}
}
然后我们就可以通过传入不同的制作商获取到不同的手机产品了
@Test
public void Builder(){
IPhoneBuilder iPhoneBuilder = new IPhoneBuilder();
HuaweiPhoneBuilder huaweiPhoneBuilder = new HuaweiPhoneBuilder();
Phone iphone= new PhoneDerector(iPhoneBuilder).createPhone();
Phone huawei = new PhoneDerector(huaweiPhoneBuilder).createPhone();
}
![](https://img.haomeiwen.com/i8648151/ec47e1dc7fd184c9.png)
网友评论