gpt4 book ai didi

angular - 带有 Angular 和 Typescript 的策略模式

转载 作者:行者123 更新时间:2023-12-04 11:59:03 25 4
gpt4 key购买 nike

我想在 Angular/Typescript 中实现策略模式并在组件中使用服务;服务将策略接口(interface)作为构造函数参数。此外,约束是服务依赖于 Angular 级别的其他一些注入(inject)服务。
我正在挖掘文档,但无法找到一种方法来做到这一点。我不希望以过度设计的代码结束,而是寻找简单的解决方案来实现策略模式。
请参见下面的模拟代码:

export interface IStrategy {
calculate(a,b): number;
}

export class MinusStrategy implements IStrategy {
calculate(a,b): number {
return a - b;
}
}

export class PlusStrategy implements IStrategy {
calculate(a,b): number {
return a + b;
}
}

@Injectable()
export class CalculatorService {
// I understand it is not possible to have DI of the Interface here for calcStrategy
constructor(private http: HttpClient; private calcStrategy: IStrategy);

getByCalc() {
this.http.get('someurl?calc=' + calcStrategy.calculate(1,1));
}
}

@Component(// skipped config here...)
export class MyComponent implements OnInit {
// How to inject appropriate concrete strategy (and either autowire or provide httpClient?)
constructor(private service: new CalculatorService(httpClient, new MinusStrategy()));

useInComponent() {
this.service.getByCalc();
}
}

最佳答案

我的两分钱——
在这种情况下,您不能依赖 DI 提供具体实例。 DI 无法知道每个上下文中需要哪种类型的实例。
我建议在这里使用工厂模式。例如 -

@Injectable()
export class StrategyFactory {
createStrategy<T extends IStrategy>(c: new () => T): T {
return new c();
}
}

//then you can inject StrategyFactory in your service class, use it like -
factory.createStrategy(MinusStrategy).calculate(2, 1);

关于angular - 带有 Angular 和 Typescript 的策略模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62852327/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com