在抽象工厂模式中,所涉及的主要实体包括
我在各种实现中都见过,并且观察到客户端代码知道具体工厂。根据我在不同地方看到的模式的共同定义,如下所示
定义用于创建对象的接口,但让子类来决定要实例化哪个类。
根据我的观察,createProduct是抽象工厂方法中的抽象方法。它公开了一个非抽象的公共方法,比如getProduct,它从这里调用createProduct方法。根据具体工厂类的运行时对象,相应地调用createProduct。
即使基础抽象工厂类不存在,客户端代码也可以简单地调用具体工厂类的对象上的createProduct方法,因为具体的工厂类对客户端代码是可见的。
我觉得抽象基类只在下面的情况下有用
如果我们有代码来创建具体工厂类的对象,则与调用这些对象上的getProduct方法的代码分开。实例化concrete Factory classes__can的代码将工厂放置在某个队列中,可以迭代以后的队列并获得Concrete products。
请提供您宝贵的反馈。
发布于 2016-03-14 14:30:48
客户不应了解任何混凝土工厂。抽象工厂应该隐藏工厂实现细节,允许在不影响客户端的情况下交换不同的工厂。
认为AbstractFactory模式的目的是生产混凝土工厂的答案是完全错误的。不幸的是,这种错误的信息具有欺骗性的直觉性,因此错误的定义非常猖獗,许多错误的定义拥有数百个用户。
here的答案对AbstractFactory给出了相当好的解释;但是要小心,这条评论暗示着一种重复。链接线程中的答案将破坏对模式的任何理解。
发布于 2016-03-14 14:49:44
抽象工厂不必是抽象类,大多数情况下它只是一个接口。
要使用的混凝土工厂应该注入DI。这样,工厂的消费者就不知道用的是哪一种。
https://stackoverflow.com/questions/35987934
复制相似问题