java设计模式_建造者模式

/**
 * 
 */
package com.wangbiao.design.builder;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

/**
 * @Title: Product.java
 * @Package com.wangbiao.design.builder
 * @Description: TODO 
 * @author wangbiao   
 * @date 2014-9-26 上午10:06:53 
 * @version V1.0
 */
public class Product {
    
    List<String> parts = new ArrayList<String>();
    
    public void addPart(String part){
        parts.add(part);
    }
    
    public void display(){
        Iterator<String> iter =  parts.iterator();
        
        while(iter.hasNext()){
            
            System.out.println(iter.next());
        }
    }

}

/**
 * 
 */
package com.wangbiao.design.builder;

/**
 * @Title: Builder.java
 * @Package com.wangbiao.design.builder
 * @Description: TODO 
 * @author wangbiao   
 * @date 2014-9-26 上午10:16:28 
 * @version V1.0
 */
public abstract class Builder {
    
    public abstract void builderPartA();
    public abstract void bulderPartB();
    public abstract Product getResult();

}

/**
 * 
 */
package com.wangbiao.design.builder;

/**
 * @Title: ConcreteBuilderA.java
 * @Package com.wangbiao.design.builder
 * @Description: TODO 
 * @author wangbiao   
 * @date 2014-9-26 上午10:18:47 
 * @version V1.0
 */
public class ConcreteBuilderA extends Builder {
    private Product product = new Product();

    /* (non-Javadoc)
     * @see com.wangbiao.design.builder.Builder#builderPartA()
     */
    @Override
    public void builderPartA() {
        // TODO Auto-generated method stub
        product.addPart("大屏");
    }

    /* (non-Javadoc)
     * @see com.wangbiao.design.builder.Builder#bulderPartB()
     */
    @Override
    public void bulderPartB() {
        // TODO Auto-generated method stub
        product.addPart("金属机身");
    }

    /* (non-Javadoc)
     * @see com.wangbiao.design.builder.Builder#getResult()
     */
    @Override
    public Product getResult() {
        // TODO Auto-generated method stub
        return product;
    }

}

/**
 * 
 */
package com.wangbiao.design.builder;

/**
 * @Title: ConcreteBuilderB.java
 * @Package com.wangbiao.design.builder
 * @Description: TODO 
 * @author wangbiao   
 * @date 2014-9-26 上午10:19:05 
 * @version V1.0
 */
public class ConcreteBuilderB extends Builder {
    private Product product = new Product();
    /* (non-Javadoc)
     * @see com.wangbiao.design.builder.Builder#builderPartA()
     */
    @Override
    public void builderPartA() {
        // TODO Auto-generated method stub
        product.addPart("小屏");
    }

    /* (non-Javadoc)
     * @see com.wangbiao.design.builder.Builder#bulderPartB()
     */
    @Override
    public void bulderPartB() {
        // TODO Auto-generated method stub
        product.addPart("塑料机身");
    }

    /* (non-Javadoc)
     * @see com.wangbiao.design.builder.Builder#getResult()
     */
    @Override
    public Product getResult() {
        // TODO Auto-generated method stub
        return product;
    }

}

/**
 * 
 */
package com.wangbiao.design.builder;

/**
 * @Title: Director.java
 * @Package com.wangbiao.design.builder
 * @Description: TODO 
 * @author wangbiao   
 * @date 2014-9-26 上午10:19:19 
 * @version V1.0
 */
public class Director {

    public void  createProduct(Builder builder){
        
        builder.builderPartA();
        builder.bulderPartB();
    }
}

/**
 * 
 */
package com.wangbiao.design.builder;

/**
 * @Title: Client.java
 * @Package com.wangbiao.design.builder
 * @Description: TODO 
 * @author wangbiao   
 * @date 2014-9-26 上午10:16:10 
 * @version V1.0
 */
public class Client {

    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        
        
        /*
         *建造者模式的好处是分离了建造代码和表示代码,隐藏了建造的过程。
         *建造者模式适用于创建复杂对象的逻辑独立于创建过程和装配方式的时候 。
         * 
        */
        Director director = new Director();
        Builder builderA = new ConcreteBuilderA();
        Builder builderB = new ConcreteBuilderB();
        
        director.createProduct(builderA);
        Product p1 = builderA.getResult();
        p1.display();
        
        director.createProduct(builderB);
        Product p2 = builderB.getResult();
        p2.display();
        
    }

}
时间: 2024-08-10 02:10:52

java设计模式_建造者模式的相关文章

大话设计模式_建造者模式(Java代码)

建造者模式:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示 简单描述:1个产品类(可有可无,关键是建造流程),1个抽象建造步骤类,多个具体建造子类(不同的类建造不同的产品),1个指挥者(用于规定建造流程),客户端指定需要建造的具体类型,由指挥者建造好之后,建造者子类返回对应产品给客户 大话设计模式中的截图: 例子代码: Product类: 1 package com.longsheng.builder; 2 3 public class Product { 4 5 pr

05.设计模式_建造者模式

转载自  http://www.cnblogs.com/zhili/p/BuilderPattern.html 一.引言 在软件系统中,有时需要创建一个复杂对象,并且这个复杂对象由其各部分子对象通过一定的步骤组合而成.例如一个采购系统中,如果需要采购员去采购一批电脑时,在这个实际需求中,电脑就是一个复杂的对象,它是由CPU.主板.硬盘.显卡.机箱等组装而成的,如果此时让采购员一台一台电脑去组装的话真是要累死采购员了,这里就可以采用建造者模式来解决这个问题,我们可以把电脑的各个组件的组装过程封装到

java设计模式之建造者模式

本文继续介绍23种设计模式系列之建造者模式. 定义: 建造者模式:将一个复杂的对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示. 实用范围 1.当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时. 2.当构造过程必须允许被构造的对象有不同表示时. 角色 在这样的设计模式中,有以下几个角色: 1.Builder:为创建一个产品对象的各个部件指定抽象接口. 2.ConcreteBuilder:实现Builder的接口以构造和装配该产品的各个部件,定义并明确它所创建的表示

java设计模式之四建造者模式(Builder)

工厂类模式提供的是创建单个类的模式,而建造者模式则是将各种产品集中起来进行管理,用来创建复合对象,所谓复合对象就是指某个类具有不同的属性,其实建造者模式就是前面抽象工厂模式和最后的Test结合起来得到的.我们看一下代码: 还和前面一样,一个Sender接口,两个实现类MailSender和SmsSender.最后,建造者类如下: [java] view plaincopy public class Builder { private List<Sender> list = new ArrayL

java设计模式之-建造者模式

建造者模式能够将复杂的构建与其表示相分离,是的同样的构建过程可以创建出不同的表示. 建造者模式与抽象工厂的区别是:在建造者模式里,有个指导者,这个指导者来管理建造者,用户与指导者相互联系,指导者联系建造者,最终得到我们需要的产品.即建造者模式可以强制实行一种分步骤进行的建造过程. 建造者模式是将复杂的的内部创建封装在内部,对于外部调用的人员来说,只要传入指导者和建造者就可以了,具体内部怎样建造成为产品,用户不用知道,不同的产品需要定义不同的建造者. 概念: 1.抽象建造者(builder):此类

【java】java 设计模式(4):建造者模式(Builder)

工厂类模式提供的是创建单个类的模式,而建造者模式则是将各种产品集中起来进行管理,用来创建复合对象,所谓复合对象就是指某个类具有不同的属性,其实建造者模式就是前面抽象工厂模式和最后的Test结合起来得到的.我们看一下代码: 还和前面一样,一个Sender接口,两个实现类MailSender和SmsSender.最后,建造者类如下: public class Builder { private List<Sender> list = new ArrayList<Sender>(); p

Java 设计模式_代理模式(2016-08-19)

概念: 代理模式是对象的结构模式.代理模式给某一个对象提供一个代理对象,并由代理对象控制对原对象的引用. 就是一个人或者机构代表另一个人或者机构采取行动.在一些情况下,一个客户不想或者不能够直接引用一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用. 类图: 在代理模式中的角色: ● 抽象对象角色:声明了目标对象和代理对象的共同接口,这样一来在任何可以使用目标对象的地方都可以使用代理对象. ● 目标对象角色:定义了代理对象所代表的目标对象. ● 代理对象角色:代理对象内部含有目标对象的

java设计模式_桥接模式

现在的手机,按照操作系统分,有ios,有android,还有window phone等. 如果是按软件来分的话,就有通讯录,游戏等. 按继承的思维来考虑的话,如下: 但是问题来了,如果是按照手机品牌来分的话,增加一个新的手机品牌的话,意味着不仅要增加手机品牌,还要增加改手机品牌的通讯录和游戏. 若按照手机软件来分的话,同样,增加一个新的软件的话,意味着不仅要增加新的软件,还要增加各个品牌手机对应的通讯录和游戏. 通过桥接模式的话,若增加软件,则只需要增加软件即可,若增加品牌,只需增加品牌即可.

设计模式_建造者模式

Builder Pattern Separate the construction of a complex object from its representation so that the same construction process can create different representations. 将一个复杂对象的构建与它的表示分离,使得同样的构造过程可以创建不同的表示. BenzModel继承CarModel,实现业务,而涉及序列. BenzBuilder类中有一个私有