Java设计模式笔记(5)建造者模式
生活随笔
收集整理的這篇文章主要介紹了
Java设计模式笔记(5)建造者模式
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
建造者模式:將一個復雜對象的構建與它的表示分離,使得同樣的構建過程可以創建不同的表示。
建造者模式的4個角色:
Product產品類:通常是實現了模版方法模式,有模版方法和基本方法。
Builder抽象建造者:規范產品的組建,一般是由子類實現。
ConcreteBuilder具體建造者:實現抽象建造者定義的所有方法,并且返回一個組建好的對象。
Director導演類:負責安排已有模塊的順序,然后告訴Builder開始構建。
package com.juno.BuilderPattern;import java.util.ArrayList;public abstract class Product {public final static int MSG_OPERATE_1 = 1;public final static int MSG_OPERATE_2 = 2;private ArrayList<Integer> sequence = new ArrayList<Integer>();protected abstract void operate1();protected abstract void operate2();public final void doSomething() {if(sequence.size() == 0) {return;}for(int msg : sequence) {if (msg == MSG_OPERATE_1) {operate1();} else if (msg == MSG_OPERATE_2) {operate2();}}} public final void setSequence(ArrayList<Integer> sequence) {this.sequence = sequence;} }package com.juno.BuilderPattern;public class ConcreteProductA extends Product {@Overrideprotected void operate1() {System.out.println("ProductA use MSG_OPERATE_1 operate1~~");}@Overrideprotected void operate2() {System.out.println("ProductA use MSG_OPERATE_2 operate2~~");}}
package com.juno.BuilderPattern;public class ConcreteProductB extends Product {@Overrideprotected void operate1() {System.out.println("ProductB use MSG_OPERATE_1 operate1~~");}@Overrideprotected void operate2() {System.out.println("ProductB use MSG_OPERATE_2 operate2~~");}}
package com.juno.BuilderPattern;import java.util.ArrayList;public abstract class Builder {public abstract void setPart(ArrayList<Integer> sequence);public abstract Product buildProduct(); }
package com.juno.BuilderPattern;import java.util.ArrayList;public class ConcreteBuilderA extends Builder {private ConcreteProductA productA = new ConcreteProductA();@Overridepublic void setPart(ArrayList<Integer> sequence) {this.productA.setSequence(sequence);}@Overridepublic ConcreteProductA buildProduct() {return this.productA;}}
package com.juno.BuilderPattern;import java.util.ArrayList;public class ConcreteBuilderB extends Builder {private ConcreteProductB productB = new ConcreteProductB();@Overridepublic void setPart(ArrayList<Integer> sequence) {this.productB.setSequence(sequence);}@Overridepublic ConcreteProductB buildProduct() {return this.productB;}}
package com.juno.BuilderPattern;import java.util.ArrayList;public class Director {private ArrayList<Integer> sequence = new ArrayList<Integer>();private ConcreteBuilderA productABuilder = new ConcreteBuilderA();private ConcreteBuilderB productBBuilder = new ConcreteBuilderB();public ConcreteProductA getProductA1() {sequence.clear();sequence.add(Product.MSG_OPERATE_1);sequence.add(Product.MSG_OPERATE_2);productABuilder.setPart(sequence);return productABuilder.buildProduct();}public ConcreteProductA getProductA2() {sequence.clear();sequence.add(Product.MSG_OPERATE_1);productABuilder.setPart(sequence);return productABuilder.buildProduct();}public ConcreteProductB getProductB1() {sequence.clear();sequence.add(Product.MSG_OPERATE_1);sequence.add(Product.MSG_OPERATE_2);productBBuilder.setPart(sequence);return productBBuilder.buildProduct();}public ConcreteProductB getProductB2() {sequence.clear();sequence.add(Product.MSG_OPERATE_2);productBBuilder.setPart(sequence);return productBBuilder.buildProduct();} } package com.juno.BuilderPattern;public class Client {public static void main(String[] args) {Director director = new Director();System.out.println("== ProductA1 ==");director.getProductA1().doSomething();System.out.println("== ProductA2 ==");director.getProductA2().doSomething();System.out.println("== ProductB1 ==");director.getProductB1().doSomething();System.out.println("== ProductB2 ==");director.getProductB2().doSomething();} }
總結
以上是生活随笔為你收集整理的Java设计模式笔记(5)建造者模式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: vue resource then
- 下一篇: bootstarp table