让我们从一些幼稚的代码开始:
class SettingFactory
{
public function create($val,$type): Setting
{
switch($type) {
case 'bool':
return new CanDoSmthSetting();
case 'multipleChoice':
return new SomeOtherTypeSetting();
}
}
}
interface Setting
{
public function get();
public function set();
public function serialize();
}
interface BoolSetting extends Setting
{
public function get(): bool;
public function set(bool $value): void;
}
interface MultipleChoiceSetting extends Setting
{
public function get(): array;
public function set(array $values): void;
}
class CanDoSmthSetting implements BoolSetting
{
...
}
class SomeOtherTypeSetting implements MultipleChoiceSetting
{
...
}
有些工厂会创建一些设置。有一个预定义的设置类型列表,每种类型都有其自己的行为和规则。我很想使用返回值和接口,但是我不知道怎么做。父界面没有类型提示和返回类型的想法似乎是错误的。
如何做得更好?