gpt4 book ai didi

design-patterns - 扩建工厂

转载 作者:行者123 更新时间:2023-12-04 07:01:36 27 4
gpt4 key购买 nike

我有两个类(class)

class A {
String _id;

static final Map<String, A> _instances = <String, A>{};

factory A.getInstance(String id){
if(!_instances.containsKey(id)){
_instances[id] = new A._internal(id);
}
return _instances[id];
}

A._internal(this._id);
}

class B extends A {
factory B.getInstance(int id){
return new A.getInstance(id.toString());
}
}

我知道这不是一个好的做法,因为 A 类不是 B 类的子类型。有什么办法可以做到这一点吗?

最佳答案

您必须实现 A 并通过实现所有方法或使用noSuchMethod(invocation) 委托(delegate)方法调用。

对于给定的 A 类:

class A {
static final Map<String, A> _instances = <String, A>{};

String _id;

A._internal(this._id);
factory A.getInstance(String id) =>
_instances.putIfAbsent(id, () => new A._internal(id));

String get id => _id;
String get name => "name_${_id}";
}

您的 B 类可能如下所示:

class B implements A {
final A a;

B(int id) : a = new A.getInstance(id.toString());

String get id => a.id;
String get name => a.name;
}

或使用noSuchMethod:

import 'dart:mirrors';
class B implements A {
final A a;

B(int id) : a = new A.getInstance(id.toString());

noSuchMethod(Invocation invocation) => reflect(a).delegate(invocation);
}

关于design-patterns - 扩建工厂,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17535308/

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