Associação entre classes

Definição

Associação é a relação mais fraca entre objetos.

Os elementos envolvidos são independentes entre si.

Exemplo

export class Writer {
  private _tool: Tool | null = null;
 
  constructor(private _name: string) {}
 
  set tool(tool: Tool | null) {
    this._tool = tool;
  }
 
  get tool(): Tool | null {
    return this._tool;
  }
 
  write(): void {
    if (this.tool === null) {
      console.log("Não posso escrever sem ferramenta...");
      return;
    }
 
    this.tool.write();
  }
}
 
export abstract class Tool {
  constructor(private _name: string) {}
 
  abstract write(): void;
 
  get name(): string {
    return this._name;
  }
}
 
export class Pen extends Tool {
  write(): void {
    console.log(`Escrevendo com ${this.name}...`);
  }
}
 
export class TypeWriter extends Tool {
  write(): void {
    console.log(`Digitando com ${this.name}...`);
  }
}
 
const writer = new Writer("Luiz");
 
writer.write(); // Não posso escrever sem ferramenta...
 
const pen = new Pen("Bic");
writer.tool = pen;
writer.write(); // Escrevendo com Bic...
 
const typeWriter = new TypeWriter("Máquina de escrita");
writer.tool = typeWriter;
writer.write(); // Digitando com Máquina de escrita...