小谈抽象工厂模式与工厂方法,Abstract Factory Pattern and Factory Method
2016-08-10 22:59
447 查看
问题:从我所阅读的材料中,我看到:工厂方法模式允许你定义一个方法,这个方法可以创建一个实实在在的商品,但是却隐藏了实现细节,这样客户(client)可以得到产品。我第一个问题是关于抽象工厂:是不是抽象工厂模式只允许你创建一系列对象而不是仅仅一个对象?是不是抽象工厂只会根据你调用的方法返回一个很大的对象,或者许多对象?
第二个问题是,我不是很理解这样一句话:
使用抽象工厂模式,一个类的责任就是实例化另外一个对象,通过组合的方式,而工厂对象使用继承和依赖一个子类去负责对象的实例化
我的理解是:
工厂方法模式有一个创建者(Creator)接口,这个接口会让具体的创建者负责去知道那个具体对象应该被实例化,这是不是意味着用继承去负责处理对象实例化?
回答:
最主要的区别就是,工厂方法是一个单一的方法,而抽象工厂是一个对象。
因为工厂方法只是一个方法,它可以在子类里被重写,因此会有人这么说:
工厂方法使用继承和依赖子类去设计对象的实例化。
这种方法是假设,这个对象在调用它自己的工厂方法。因此,唯一能够改变返回值的就是一个子类。
抽象工厂是一个对象,这个对象有多个工厂方法,所以会有这种说法:
用抽象工厂模式,一个类去通过组合的方式去负责对象的实例化
这里有一个例子,对象A想要创建Foo对象
工厂方法:
抽象工厂:
第二个问题是,我不是很理解这样一句话:
使用抽象工厂模式,一个类的责任就是实例化另外一个对象,通过组合的方式,而工厂对象使用继承和依赖一个子类去负责对象的实例化
我的理解是:
工厂方法模式有一个创建者(Creator)接口,这个接口会让具体的创建者负责去知道那个具体对象应该被实例化,这是不是意味着用继承去负责处理对象实例化?
回答:
最主要的区别就是,工厂方法是一个单一的方法,而抽象工厂是一个对象。
因为工厂方法只是一个方法,它可以在子类里被重写,因此会有人这么说:
工厂方法使用继承和依赖子类去设计对象的实例化。
这种方法是假设,这个对象在调用它自己的工厂方法。因此,唯一能够改变返回值的就是一个子类。
抽象工厂是一个对象,这个对象有多个工厂方法,所以会有这种说法:
用抽象工厂模式,一个类去通过组合的方式去负责对象的实例化
这里有一个例子,对象A想要创建Foo对象
工厂方法:
class A { public void doSomething() { Foo f = makeFoo(); f.whatever(); } protected Foo makeFoo() { return new RegularFoo(); } } class B extends A { protected Foo makeFoo() { //subclass is overriding the factory method //to return something different return new SuperFoo(); } }
抽象工厂:
class A { private Factory factory; public A(Factory factory) { this.factory = factory; } public void doSomething() { //The concrete class of "f" depends on the concrete class //of the factory passed into the constructor. If you provide a //different factory, you get a different Foo object. Foo f = factory.makeFoo(); f.whatever(); } } interface Factory { Foo makeFoo(); Bar makeBar(); Aycufcn makeAmbiguousYetCommonlyUsedFakeClassName(); } //need to make concrete factories that implement the "Factory" interface here
相关文章推荐
- VB.net设计模式之工厂方法,抽象工厂方法(Factory Method Pattern,Abstract Factory Method Pattern)
- 抽象工厂模式(Abstract Factory Method Pattern)
- 抽象工厂方法模式(Abstract Factory Pattern)
- 抽象工厂的初次尝试 ((15c++ Homework) polymorphic and OOP design pattern Abstract Factory)
- Java设计模式二:抽象工厂模式(Abstract Factory)/工厂方法(Factory Method)
- 工厂模式(Factory Pattern)之简单工厂,工厂方法模式(Factory Method Pattern),抽象工厂模式(Abstract Factory Pattern)
- Head First Design Pattern - 4 - This week's interview: Factory Method and Abstract Facotry, on each other
- 2.3 《硬啃设计模式》 第5章 “妞”太多,如何管理?(2)- 工厂方法(Factory Method Pattern)
- 设计模式 工厂方法(Factory Method Pattern)
- 简单工厂模式 (Simple Factory Pattern) / 静态工厂方法(Static Factory Method)模式
- 设计模式 工厂方法(Factory Method Pattern)转载
- Java设计模式二:抽象工厂模式(Abstract Factory)/工厂方法(Factory Method)
- Understanding Factory Method and Abstract Factory Patterns(理解工厂方法模式和抽象工厂模式)
- [C++]polymorphic and OOP design pattern Abstract Factory(抽象工厂模式)
- 工厂方法(Factory Method)
- C#面向对象设计模式纵横谈(四) --- Factory Method 工厂方法(创建型模式)
- 乐在其中设计模式(C#) - 抽象工厂模式(Abstract Factory Pattern)
- (第Ⅱ部分 创建型模式篇) 第4章 工厂方法(Factory Method)
- 设计模式(八)[工厂方法(Factory Method)模式]
- 设计模式示例一 Factory Method(工厂方法)