常见的 23 种设计模式扩展之组合实体模式

131 阅读2分钟

组合实体模式

组合实体模式(Composite Entity Pattern)是一种企业模式,旨在通过将多个组合实体封装在一个单个实体中来解决问题,从而实现对多个实体的同时操作。组合实体是由多个实体组成的聚合实体。每个组合实体本身包含多个实体,这些实体可能彼此关联或互相依赖,但它们的内部结构对客户端是透明的。客户端只需要与组合实体进行交互,而无需了解其内部结构。

组合实体模式通常用于用户界面设计和数据持久性。例如,一个用户界面可能需要访问多个数据库表,而这些表可能会经常变化。使用组合实体模式,这些表可以被组合成一个单独的实体,从而减少了客户端代码的复杂性。在数据持久性方面,组合实体模式可以将多个数据源组合成一个单独的实体,从而简化了数据访问和维护。

例子

以下是一个简单的组合实体模式的例子,实现了一个简单的订单系统,其中包含了订单的商品信息和用户信息:


// 实体对象
class Item {
  constructor(name) {
    this.name = name;
  }

  getName() {
    return this.name;
  }
}

class User {
  constructor(name) {
    this.name = name;
  }

  getName() {
    return this.name;
  }
}


// 组合实体对象
class Order {
  constructor() {
    this.items = [];
    this.user = new User();
  }

  addItem(item) {
    this.items.push(item);
  }

  setUser(user) {
    this.user = user;
  }

  getTotalPrice() {
    return this.items.reduce((total, item) => total + item.price, 0);
  }

  display() {
    console.log(`User: ${this.user.getName()}`);
    console.log(`Items: ${this.items.map(item => item.getName()).join(', ')}`);
    console.log(`Total price: ${this.getTotalPrice()}`);
  }
}

// 客户端使用
const order = new Order();
const item1 = new Item('Item 1');
const item2 = new Item('Item 2');
order.addItem(item1);
order.addItem(item2);
const user = new User('John Doe');
order.setUser(user);
order.display();

在上面的例子中,ItemUser 分别表示商品和用户的实体对象,Order 则表示组合实体对象,它包含了商品和用户的信息,可以通过 addItem()setUser() 方法来设置,通过 getTotalPrice() 方法计算出商品的总价值,最终通过 display() 方法来显示订单的信息。