建造者模式同属于创建型模式
package com.demo.build;
/**
* 建造者模式
* 属于创建型模式
* 建造者模式与工厂模式相似,也是用来创建对象
* 建造者模式关键点在于建造和装配分离,
* 建造者最终只会生成一个完整的对象,对象里面会分成好几个模块,建造者模式强调的是这个装配的过程。
* 而工厂模式有可能是会同时创建一个(简单工厂或者工厂方法模式)或者多个对象(抽象工厂模式),强调生产创建。
*/
abstract class GunBuilder {
//抽象类定义装配方法
protected Gun gun=new Gun();
//枪身
abstract void gunPart();
//子弹
abstract void gunBullet();
//消音器
abstract void gunSilencer();
//瞄准镜
abstract void gunTelescope();
protected Gun getGun(){
return gun;
}
}
//AK47装配类实现抽象builer类
class AKGunBuilder extends GunBuilder{
@Override
void gunPart() {
gun.setGunPart("AK47");
}
@Override
void gunBullet() {
gun.setGunBullet("7.62mm");
}
@Override
void gunSilencer() {
gun.setGunSilencer("步枪消音器");
}
@Override
void gunTelescope() {
gun.setGunTelescope("红点瞄准镜");
}
}
class Gun{
private String gunPart;
private String gunBullet;
private String gunSilencer;
private String gunTelescope;
public String getGunPart() {
return gunPart;
}
public void setGunPart(String gunPart) {
this.gunPart = gunPart;
}
public String getGunBullet() {
return gunBullet;
}
public void setGunBullet(String gunBullet) {
this.gunBullet = gunBullet;
}
public String getGunSilencer() {
return gunSilencer;
}
public void setGunSilencer(String gunSilencer) {
this.gunSilencer = gunSilencer;
}
public String getGunTelescope() {
return gunTelescope;
}
public void setGunTelescope(String gunTelescope) {
this.gunTelescope = gunTelescope;
}
@Override
public String toString() {
return "Gun{" +
"gunPart='" + gunPart + '\'' +
", gunBullet='" + gunBullet + '\'' +
", gunSilencer='" + gunSilencer + '\'' +
", gunTelescope='" + gunTelescope + '\'' +
'}';
}
}
package com.demo.build;
//装配者
class GunCreater {
GunBuilder gunBuilder;
Gun create(){
gunBuilder.gunPart();
gunBuilder.gunTelescope();
gunBuilder.gunSilencer();
gunBuilder.gunBullet();
return gunBuilder.getGun();
}
}
//使用者
class GunUser{
GunCreater gunCreater = new GunCreater();
Gun buy(String type){
if ("AK47".equals(type)){
gunCreater.gunBuilder=new AKGunBuilder();
}
//..
return gunCreater.create();
}
public static void main(String[] args) {
GunUser user = new GunUser();
Gun akGun = user.buy("AK47");
System.out.println(akGun.toString());
}
}