builder -对象创建模型

本文深入探讨建造者模式的原理和应用,通过实例说明如何将复杂对象的构建过程分解,实现同一构建过程创建不同表示的目的。重点讲解建造者、具体建造者、导向器和产品角色的职责,以及该模式与抽象工厂模式的区别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    1.意图
              将一个复杂对象和它的表示分离,使得同样的构建过程可以创建不同的表示
     2.参与者
       Builder -为创建product对象的各个部件提供接口
       ConcreteBuilder -实现Builder的接口以构造和装配该产品
                       -定义并明确它所创建的表示
                       -提供一个检索产品的接口
       Director - 构造使用一个Builder接口的对象
       Product  - 表示被构造的复杂对象,ConcreteBuilder创建该产品的内部表示
                                   并定义该产品的装配过程
                - 包含定义组成部件的类,包括将这些部件装配成产品的接口
     3.相关模式AbstractFactory和Builder模式都可以创建复杂对象,区别在于AbstractFactory
              着重于多个产品系列对象的创建,产品对象一步返回,而Builder着重于一步一步的构建产品,
              在最后一步返回产品。

     4.结构

代码:

public interface builder {
     void number(int i);
     void letter(String letter);
     void other(String other);
}

public class concreteBuilder1 implements builder {
	private product cipher = new product();

	@Override
	public void number(int i) {
		int out = (i + 5) % 10;
		cipher.setResult(cipher.getResult() + out);
	}

	@Override
	public void letter(String letter) {
		int out = Integer.parseInt(letter, 16);
		cipher.setResult(cipher.getResult() + out);
	}

	@Override
	public void other(String other) {
		byte[] init = other.getBytes();
		String sb = "";
		for (int i = 0; i < init.length;i++) {
			int value = init[i]|0x7F;
			init[i] = (byte) value;
			sb+=String.valueOf(init[i]);
		}
		cipher.setResult(cipher.getResult() + sb);
	}

	public product result() {
		return cipher;
	}
}

public class director {
    public void builder(String c,builder b){
    	char[] ca = c.toCharArray();
    	for(char ch:ca){
    		if('0'<=ch&&ch<='9'){
    			b.number(ch);
    		}else if(('A'<=ch&&ch<='Z')||('a'<=ch&&ch<='z')){
    			b.letter(ch+"");
    		}else{
    			b.other(ch+"");
    		}
    	}
    }
}

public class product {
	private String result = "";

	public String getResult() {
		return result;
	}

	public void setResult(String result) {
		this.result = result;
	}

}

public class Client {
	public static void main(String[] args) {
	  concreteBuilder1 builder = new concreteBuilder1();
       director director = new director();
       director.builder("1A$",builder);
       System.out.println(builder.result().getResult());
	}
}

解释一下:字符串有数字,字母和其它类型的字符,通过不同的builder进行重新构造成新的字符串,builder类针对不同的字符类型进行不同的改造的接口,concreteBuilder1 实现了具体改造策略,定义了具体产品和装配过程,director 导向器完成了的产品构造过程,product就是产品的表示。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值