學習設計模式——建立型模式day02
建造者模式
定義:將一個複雜物件的構建和與它的表示分離,使得同樣地構建過程可以建立不同的表示
主要作用:在使用者不知道物件建造過程和細節的情況下就可以直接建立複雜物件
使用者只需要給定出複雜物件的型別和內容,建造者模式按照順序建立複雜物件
建造者模式有很多變種,但是最常見的就是鏈式呼叫的樣子。
//抽象類
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
的克隆是淺克隆,碰到物件引用的時候,克隆出來的物件和原物件中的引用將指向同一個物件。通常實現深克隆的方法是將物件進行序列化,然後再進行反序列化。
相關文章
- 設計模式-建立型模式學習設計模式
- PHP設計模式—建立型設計模式PHP設計模式
- 設計模式-建立型設計模式
- JavaScript設計模式之建立型設計模式JavaScript設計模式
- 設計模式-建立型-單例模式設計模式單例
- (Java)設計模式:建立型Java設計模式
- 建立型設計模式——抽象工廠模式設計模式抽象
- 設計模式--建造者模式Builder(建立型)設計模式UI
- 設計模式--工廠模式Factory(建立型)設計模式
- 設計模式--原型模式Prototype(建立型)設計模式原型
- 聊一聊設計模式(二)-- 建立型設計模式設計模式
- 設計模式(一)建立型之單例模式設計模式單例
- C++設計模式建立型工廠模式C++設計模式
- 設計模式--單件模式Singleton(建立型)設計模式
- 建立型設計模式對比總結 設計模式(八)設計模式
- 設計模式學習——代理模式設計模式
- JAVA設計模式 4【建立型】理解建造者模式Java設計模式
- 大話 PHP 設計模式--建立型PHP設計模式
- 物件導向-設計模式-建立型物件設計模式
- 設計模式-建立型-工廠方法設計模式
- 設計模式學習設計模式
- 設計模式學習-物件池模式設計模式物件
- 設計模式學習-物件模板模式設計模式物件
- 設計模式學習-原型模式設計模式原型
- 設計模式學習-單例模式設計模式單例
- 設計模式學習-建造者模式設計模式
- 設計模式學習-工廠模式設計模式
- 設計模式學習-裝飾模式,橋接模式設計模式橋接
- 設計模式快速學習(八)委派模式設計模式
- 設計模式快速學習(七)策略模式設計模式
- 設計模式快速學習(六)模板模式設計模式
- 設計模式學習之單例模式設計模式單例
- 學習筆記-設計模式:MVC模式筆記設計模式MVC
- 設計模式學習(十八)中介者模式設計模式
- 設計模式(一)學習設計模式的好處設計模式
- Java設計模式學習Java設計模式
- MapReduce設計模式學習設計模式
- FSM 設計模式學習設計模式