import { Cache } from './interfaces'; export abstract class ArrayCache implements Cache { protected _payloads: T[] = []; public abstract add(value: T): void; public forEach(callback: (value: T) => void): void { this._payloads.forEach(value => callback(value)); } } export class ValueCache extends ArrayCache { public add(value: T): void { this._payloads = [ value ]; } } export class CollectionCache extends ArrayCache { public add(value: T): void { this._payloads.push(value); } }