纯手写理解设计模式代码之建造者模式

建造者模式同属于创建型模式

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());
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值