• 【设计模式】建造者模式


    建造者模式

    1. 什么是建造者模式

    • 建造者模式:是将一个复杂的对象的构建与它的表示分离,使得同样的构建过程可以创建不同的方式进行创建。

    • 工厂类模式是提供的是创建单个类的产品

    • 而建造者模式则是将各种产品集中起来进行管理,用来具有不同的属性的产品

    建造者模式通常包括下面几个角色:

    • builder:给出一个抽象接口,以规范产品对象的各个组成成分的建造。这个接口规定要实现复杂对象的哪些部分的创建,并不涉及具体的对象部件的创建。
    • ConcreteBuilder:实现Builder接口,针对不同的商业逻辑,具体化复杂对象的各部分的创建。 在建造过程完成后,提供产品的实例。
    • Director:调用具体建造者来创建复杂对象的各个部分,在指导者中不涉及具体产品的信息,只负责保证对象各部分完整创建或按某种顺序创建。
    • Product:要创建的复杂对象。

    2.建造者模式的使用场景

    使用场景:

    • 需要生成的对象具有复杂的内部结构。
    • 需要生成的对象内部属性本身相互依赖。
    • 与工厂模式的区别是:建造者模式更加关注与零件装配的顺序。

    JAVA 中的 StringBuilder就是建造者模式创建的,他把一个单个字符的char数组组合起来

    Spring不是建造者模式,它提供的操作应该是对于字符串本身的一些操作,而不是创建或改变一个字符串。

    3.代码案例

    1. 建立一个装备对象Arms
    package com.lijie;
    
    //装备类
    public class Arms {
    	//头盔
    	private String helmet;
    	//铠甲
    	private String armor;
    	//武器
    	private String weapon;
    	
    	//省略Git和Set方法...........
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    1. 创建Builder接口(给出一个抽象接口,以规范产品对象的各个组成成分的建造,这个接口只是规范)
    package com.lijie;
    
    public interface PersonBuilder {
    
    	void builderHelmetMurder();
    
    	void builderArmorMurder();
    
    	void builderWeaponMurder();
    
    	void builderHelmetYanLong();
    
    	void builderArmorYanLong();
    
    	void builderWeaponYanLong();
    
    	Arms BuilderArms(); //组装
    }
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    1. 创建Builder实现类(这个类主要实现复杂对象创建的哪些部分需要什么属性)
    package com.lijie;
    
    public class ArmsBuilder implements PersonBuilder {
        private Arms arms;
    
        //创建一个Arms实例,用于调用set方法
        public ArmsBuilder() {
            arms = new Arms();
        }
    
        public void builderHelmetMurder() {
            arms.setHelmet("夺命头盔");
        }
    
        public void builderArmorMurder() {
            arms.setArmor("夺命铠甲");
        }
    
        public void builderWeaponMurder() {
            arms.setWeapon("夺命宝刀");
        }
    
        public void builderHelmetYanLong() {
            arms.setHelmet("炎龙头盔");
        }
    
        public void builderArmorYanLong() {
            arms.setArmor("炎龙铠甲");
        }
    
        public void builderWeaponYanLong() {
            arms.setWeapon("炎龙宝刀");
        }
    
        public Arms BuilderArms() {
            return arms;
        }
    }
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    1. Director(调用具体建造者来创建复杂对象的各个部分,在指导者中不涉及具体产品的信息,只负责保证对象各部分完整创建或按某种顺序创建)
    package com.lijie;
    
    public class PersonDirector {
    	
    	//组装
    	public Arms constructPerson(PersonBuilder pb) {
    		pb.builderHelmetYanLong();
    		pb.builderArmorMurder();
    		pb.builderWeaponMurder();
    		return pb.BuilderArms();
    	}
    
    	//这里进行测试
    	public static void main(String[] args) {
    		PersonDirector pb = new PersonDirector();
    		Arms arms = pb.constructPerson(new ArmsBuilder());
    		System.out.println(arms.getHelmet());
    		System.out.println(arms.getArmor());
    		System.out.println(arms.getWeapon());
    	}
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
  • 相关阅读:
    药品研发及生产----生产过程验证管理规程
    miniblink学习
    小程序如何设置自取规则
    TinyXML-2介绍
    电路原理解题笔记(一)
    vue自动滚动组件 可以支持鼠标滚轮操作
    Intel汇编-Linux系统调用
    如何做架构设计?
    Java Class09
    华为设备NAC配置命令
  • 原文地址:https://blog.csdn.net/df007df/article/details/133988689