1
我正在学习GOF书中的设计模式。可以使用抽象工厂模式类型的协方差
有一件关于抽象工厂模式实现,让我混在一起。我会用代码开始:
抽象工厂:
public interface AnimalsFactory {
Animal getWaterAnimal();
Animal getLandAnimal();
Animal getFlyingAnimal();
}
混凝土厂:
public class SafariAnimalsFactory implements AnimalsFactory {
@Override
public Hippo getWaterAnimal() {
return new Hippo();
}
@Override
public Giraffe getLandAnimal() {
return new Giraffe();
}
@Override
public Vulture getFlyingAnimal() {
return new Vulture();
}
}
我用的类型的协方差这样的工厂方法返回具体的产品,而不是抽象的产品(动物)。
我喜欢它,但是这不违反有关从客户端封装产品的经验法则吗?或者,也许我正在推翻这一点。
'狮子getFlyingAnimal()' - 因为狮子可以飞 –
@SvetlinZarev不知何故,我错过了xD ... – Tomasz