1. 程式人生 > >設計模式之組合實體模式(Composite Entity Pattern)

設計模式之組合實體模式(Composite Entity Pattern)

組合實體模式(Composite Entity Pattern)用在 EJB 持久化機制中。一個組合實體是一個 EJB 實體 bean,代表了物件的圖解。當更新一個組合實體時,內部依賴物件 beans 會自動更新,因為它們是由 EJB 實體 bean 管理的。以下是組合實體 bean 的參與者。
組合實體(Composite Entity) - 它是主要的實體 bean。它可以是粗粒的,或者可以包含一個粗粒度物件,用於持續生命週期。
粗粒度物件(Coarse-Grained Object) - 該物件包含依賴物件。它有自己的生命週期,也能管理依賴物件的生命週期。
依賴物件(Dependent Object)

- 依賴物件是一個持續生命週期依賴於粗粒度物件的物件。
策略(Strategies) - 策略表示如何實現組合實體。
程式碼:
1.依賴物件

//依賴物件1
public class DependentObject1 {
    private String data;

    public String getData() {
        return data;
    }

    public void setData(String data) {
        this.data = data;
    }
    
}
public class DependentObject2 {
    private String data;

    public String getData() {
        return data;
    }

    public void setData(String data) {
        this.data = data;
    }
    
}

2.粗粒度物件

public class CoarseGrainedObject {
    DependentObject1 obj1=new DependentObject1();
    DependentObject2 obj2=new DependentObject2();
    
    public void setData(String data1,String data2) {
        obj1.setData(data1);
        obj2.setData(data2);
    }
    
    public String[] getData() {
        return new String[] {obj1.getData(),obj2.getData()};
    }
    
}

3.組合實體

//組合實體
public class CompositeEntity {
    private CoarseGrainedObject obj=new CoarseGrainedObject();

    public String[] getData() {
        return obj.getData();
    }

    public void setData(String data1,String data2) {
        this.obj.setData(data1, data2);;
    }
}

4.策略

public class Client {
    private CompositeEntity entity=new CompositeEntity();
    
    public void setData(String data1,String data2) {
        this.entity.setData(data1, data2);
    }
    
    public void printData() {
        for (String data : entity.getData()) {
            System.out.println("Data:"+data);
        }
    }
    
}

5.測試

public class Test {
    public static void main(String[] args) {
        Client client=new Client();
        client.setData("james", "bond");
        client.printData();
        
    }
}

6.測試結果

Data:james
Data:bond

7.結論
不太理解,可能是生命週期不同。還望有懂的指教。