學習設計模式——建立型模式day02

凌晨向燕京發表於2020-10-04

建造者模式

定義:將一個複雜物件的構建和與它的表示分離,使得同樣地構建過程可以建立不同的表示

主要作用:在使用者不知道物件建造過程和細節的情況下就可以直接建立複雜物件
使用者只需要給定出複雜物件的型別和內容,建造者模式按照順序建立複雜物件

建造者模式有很多變種,但是最常見的就是鏈式呼叫的樣子。

//抽象類
public abstract class Builder {
    abstract Builder buildA(String msg); //憨包
    abstract Builder buildB(String msg); //可樂
    abstract Builder buildC(String msg); //薯條
    abstract Builder buildD(String msg); //甜點

    abstract Product  getProduct();

}

//工作者
public class Worker extends Builder {
    private Product product;

    public Worker(){
        product=new Product();
    }

    Builder buildA(String msg) {
        product.setBuildA(msg);
        return this;
    }

    Builder buildB(String msg) {
        product.setBuildB(msg);
        return this;
    }

    Builder buildC(String msg) {
        product.setBuildC(msg);
        return this;
    }

    Builder buildD(String msg) {
        product.setBuildD(msg);
        return this;
    }

    Product getProduct() {
        return product;
    }
}

//產品
public class Product {

    private String BuildA ="漢堡";
    private String BuildB ="可樂";
    private String BuildC ="薯條";
    private String BuildD ="甜點";

    public String getBuildA() {
        return BuildA;
    }

    public void setBuildA(String buildA) {
        BuildA = buildA;
    }

    public String getBuildB() {
        return BuildB;
    }

    public void setBuildB(String buildB) {
        BuildB = buildB;
    }

    public String getBuildC() {
        return BuildC;
    }

    public void setBuildC(String buildC) {
        BuildC = buildC;
    }

    public String getBuildD() {
        return BuildD;
    }

    public void setBuildD(String buildD) {
        BuildD = buildD;
    }

    @Override
    public String toString() {
        return "Product{" +
                "BuildA='" + BuildA + '\'' +
                ", BuildB='" + BuildB + '\'' +
                ", BuildC='" + BuildC + '\'' +
                ", BuildD='" + BuildD + '\'' +
                '}';
    }
}

測試:

public class Test {
    public static void main(String[] args) {
        Builder builder =new Worker();

        Product product=builder.buildA("全家桶").buildB("冰淇淋").getProduct();

        System.out.println(product);
    }
}

結果:

在這裡插入圖片描述

原型模式

原型模式很簡單:有一個原型例項,基於這個原型例項產生新的例項,也就是“克隆”了。

Object 類中有一個 clone() 方法,它用於生成一個新的物件,當然,如果我們要呼叫這個方法,java 要求我們的類必須先實現 Cloneable 介面,此介面沒有定義任何方法,但是不這麼做的話,在 clone() 的時候,會丟擲 CloneNotSupportedException 異常。

java
的克隆是淺克隆,碰到物件引用的時候,克隆出來的物件和原物件中的引用將指向同一個物件。通常實現深克隆的方法是將物件進行序列化,然後再進行反序列化。

相關文章