【設計模式】之實例化建造者模式

 建造者模式可以將一個產品的內部表象與產品的生成過程分割開來,從而可以使一個建造過程生成具有不同的內部表象的產品對象。
1. com.cleversoft.designpatterns.builder2.PostalClert.java:
None.gif500)this.width=500" align=top border=0>package com.cleversoft.designpatterns.builder2;
None.gif500)this.width=500" align=top border=0>
public class PostalClert {
    
public void construct(LetterBuilder letterBuilder) {
        letterBuilder.buildEnvelop();
        letterBuilder.buildStamp();
    }

}

2. com.cleversoft.designpatterns.builder2.LetterBuilder.java:
None.gif500)this.width=500" align=top border=0>package com.cleversoft.designpatterns.builder2;
None.gif500)this.width=500" align=top border=0>
public abstract class LetterBuilder {
    
public abstract void buildEnvelop();

    
public abstract void buildStamp();

    
public abstract Letter getLetter();
}

3. com.cleversoft.designpatterns.builder2.OrdinaryMailBuilder.java:
None.gif500)this.width=500" align=top border=0>package com.cleversoft.designpatterns.builder2;
None.gif500)this.width=500" align=top border=0>
public class OrdinaryMailBuilder extends LetterBuilder {
    
private Letter ordinaryMail = new OrdinaryMail();

    
public void buildEnvelop() {
        ordinaryMail.add(
"ordinaryEnvelop"0.1);
    }


    
public void buildStamp() {
        ordinaryMail.add(
"ordinaryStamp"1.0);
    }


    
public Letter getLetter() {
        
return ordinaryMail;
    }


}

4. com.cleversoft.designpatterns.builder2.RegisteredLetterBuilder.java:
None.gif500)this.width=500" align=top border=0>package com.cleversoft.designpatterns.builder2;
None.gif500)this.width=500" align=top border=0>
public class RegisteredLetterBuilder extends LetterBuilder {
    
private Letter registeredLetter = new RegisteredLetter();

    
public void buildEnvelop() {
        registeredLetter.add(
"registeredEnvelop"2.0);
    }


    
public void buildStamp() {
        registeredLetter.add(
"registeredStamp"15.0);
    }


    
public Letter getLetter() {
        
return registeredLetter;
    }

}

5. com.cleversoft.designpatterns.builder2.Letter.java:
None.gif500)this.width=500" align=top border=0>package com.cleversoft.designpatterns.builder2;
None.gif500)this.width=500" align=top border=0>
public interface Letter {

    
public abstract void add(String type, double price);

    
public abstract void list();

}

6. com.cleversoft.designpatterns.builder2.OrdinaryMail.java:
None.gif500)this.width=500" align=top border=0>package com.cleversoft.designpatterns.builder2;
None.gif500)this.width=500" align=top border=0>
None.gif500)this.width=500" align=top border=0>
import java.util.Enumeration;
None.gif500)this.width=500" align=top border=0>
import java.util.Hashtable;
None.gif500)this.width=500" align=top border=0>
public class OrdinaryMail implements Letter {
    Hashtable
<String, Double> letter = new Hashtable<String, Double>();

    
/*
     * (non-Javadoc)
     * 
     * @see com.cleversoft.designpatterns.builder2.ILetter#add(java.lang.String,
     *      double)
     
*/

    
public void add(String type, double price) {
        letter.put(type, price);
    }


    
/*
     * (non-Javadoc)
     * 
     * @see com.cleversoft.designpatterns.builder2.ILetter#show()
     
*/

    
public void list() {
        System.out.println(
"Ordinary Letter List/n");
        Enumeration keys 
= letter.keys();
        
while (keys.hasMoreElements()) {
            String key 
= keys.nextElement().toString();
            String value 
= letter.get(key).toString();
            System.out.println(key 
+ " " + value + "");
        }


    }

}

7. com.cleversoft.designpatterns.builder2.RegisteredLetter.java:
None.gif500)this.width=500" align=top border=0>package com.cleversoft.designpatterns.builder2;
None.gif500)this.width=500" align=top border=0>
None.gif500)this.width=500" align=top border=0>
import java.util.Enumeration;
None.gif500)this.width=500" align=top border=0>
import java.util.Hashtable;
None.gif500)this.width=500" align=top border=0>
public class RegisteredLetter implements Letter {
    Hashtable
<String, Double> letter = new Hashtable<String, Double>();

    
/*
     * (non-Javadoc)
     * 
     * @see com.cleversoft.designpatterns.builder2.ILetter#add(java.lang.String,
     *      double)
     
*/

    
public void add(String type, double price) {
        letter.put(type, price);
    }


    
/*
     * (non-Javadoc)
     * 
     * @see com.cleversoft.designpatterns.builder2.ILetter#show()
     
*/

    
public void list() {
        System.out.println(
"Registered Letter List/n");
        Enumeration keys 
= letter.keys();
        
while (keys.hasMoreElements()) {
            String key 
= keys.nextElement().toString();
            String value 
= letter.get(key).toString();
            System.out.println(key 
+ " " + value + "");
        }


    }

}

8. com.cleversoft.designpatterns.builder2.Main.java:
None.gif500)this.width=500" align=top border=0>package com.cleversoft.designpatterns.builder2;
None.gif500)this.width=500" align=top border=0>
public class Main {

    
public static void main(String[] args) {
        LetterBuilder lb 
= new OrdinaryMailBuilder();
        PostalClert pc 
= new PostalClert();
        pc.construct(lb);

        Letter l 
= lb.getLetter();
        l.list();
    }

}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章