我有两种抽象产品类型:
type abstractProductA = {.
methodA: string
};
type abstractProductB = {.
methodB: int
};
用于创建以下产品类:
class productA1 = {
pub methodA => "This is methodA of ProductA1";
};
class productB1 = {
pub methodB => 1;
};
我想在抽象工厂中调用abstractProductA的实例以及abstractProductB。类似下面的内容(语法关闭,我知道):
type abstractFactory = {.
createProductA: abstractProductA,
createProductB: abstractProductB
};
因此,当我使用以下类创建新的concreteFactory时:
class concreteFactory1 = {
pub createProductA => (new productA1);
pub createProductB => (new productA1);
};
和constructer:
let g = new concreteFactory1#createProductB;
Js.log (g#methodA);
编译器应该抱怨createProductB只接受一个int,而不是一个字符串(它当前没有)。
谢谢,任何建议都非常欢迎。
答案 0 :(得分:1)
似乎错误应该发生在createProductB
返回productA1
而非productB1
的位置。为了实现这一点,您需要为abstractFactory
定义一个虚拟类,而不仅仅是一个对象类型,然后让concreteFactory
显式继承它。
class virtual abstractFactory = {
pub virtual createProductA: abstractProductA;
pub virtual createProductB: abstractProductB;
};
class concreteFactory1 = {
inherit abstractFactory;
pub createProductA => (new productB1);
pub createProductB => (new productB1);
};
这会在pub createProductA => (new productB1)
上产生以下错误:
此表达式的类型为productB1,但表达式的类型为abstractProductA,第二个对象类型没有方法methodB