建造者模式(Builder)

Posted 技术专家

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了建造者模式(Builder)相关的知识,希望对你有一定的参考价值。

建造者模式(Builder)


其实这一节这个模式,应该跟工厂模式一起写的,考虑到。牵连比较多,还是单独写出来比较好,等最后一节,在一起总结,这23种模型真正原貌是什么。

为什么会把。建造模型和工厂模型写在一起呢。其实这个问题。就像我把。简单工厂和工厂分开写一样的原因。他们其实都是同胞兄弟。演变而来,看过我写的工厂模型的同学应该知道,工厂类模式提供的是创建单个类的模式,而建造者模式则是将各种产品集中起来进行管理,用来创建复合对象的。所谓复合对象就是指某个类具有不同的属性,废话不多说。直接走起。

一。建造者模型:就是把抽象工厂创建单个对象变化创建多个对象

问题就在于如何,创建个对象。哈哈哈哈。。。。那就for循环被。直接代码走起。

工厂模型里面:一个Sender接口,两个实现类MailSender和SmsSender,都有自己去看。下面直接写builder类

public class Builder {  
      
    private List<Sender> list = new ArrayList<Sender>();  
      
    public void produceMailSender(int count){  
        for(int i=0; i<count; i++){  
            list.add(new MailSender());  
        }  
    }  
      
    public void produceSmsSender(int count){  
        for(int i=0; i<count; i++){  
            list.add(new SmsSender());  
        }  
    }  
}  

测试走起

public class Test {  
  
    public static void main(String[] args) {  
        Builder builder = new Builder();  
        builder.produceMailSender(10);  
    }  
}  

工厂模式关注的是创建单个产品,而建造者模式则关注创建符合对象,多个部分。

大家有没有注意,list的泛型是Sender接口。这是不是说,一个接口定义了多个实现类。哈哈哈。就是我们java中规定的。一个父类可以有多个子类的原理。

 

备注:(是我自己的想法)

那么如果我把List<Sender>变成map<Sender,Provider >这种形式可以嘛。这是不是就实现了,双向接口对应的多个实现类。满足我们的一个实现类接口对应一个抽象工厂类接口的实例嘛。因为Sender作为key键来使用。实现Sender的实现类却不同。因此这种写法完全可以、满足多个实现类对应多个抽象工厂接口的实现多多对应效应。

代码走起:

 public Map<Sender,Provider> produceMailSendermap(int count,int number){  
        for(int i=0; i<count; i++){  
            for(int j=0; j<number; j++){
            map.put(new MailSender(), new SendMailFactory());
            map.put(new SmsSender(), new SendSmsFactory());
            }
        }  
        return map;
    }  

测试走起:

 Map<Sender,Provider> map=builder.produceMailSendermap(4, 3);
           for (Sender key : map.keySet()) { 
               Provider value=map.get(key);
                   key.Send();                   
                value.produce().Send();
            }         

结果走起:

this is mailsender!
this is mailsender!
this is mailsender!
this is sms sender!
this is sms sender!
this is mailsender!
this is mailsender!
this is mailsender!
this is mailsender!
this is sms sender!
this is sms sender!
24

结果最后可以看出出现的次数为,24.那么也就是说键值对是24对。我们把两个类都已经实例化了、

以上是关于建造者模式(Builder)的主要内容,如果未能解决你的问题,请参考以下文章

[05]Go设计模式:建造者模式(Builder Pattern)

建造者模式-Builder

建造者模式(Builder Pattern)

设计模式-建造者模式(Builder)

23种设计模式之建造者模式代码实例

Builder 建造者模式