我是靠谱客的博主 神勇高跟鞋,最近开发中收集的这篇文章主要介绍小谈抽象工厂模式与工厂方法,Abstract Factory Pattern and Factory Method,觉得挺不错的,现在分享给大家,希望可以做个参考。
概述
问题:从我所阅读的材料中,我看到:工厂方法模式允许你定义一个方法,这个方法可以创建一个实实在在的商品,但是却隐藏了实现细节,这样客户(client)可以得到产品。我第一个问题是关于抽象工厂:是不是抽象工厂模式只允许你创建一系列对象而不是仅仅一个对象?是不是抽象工厂只会根据你调用的方法返回一个很大的对象,或者许多对象?
第二个问题是,我不是很理解这样一句话:
使用抽象工厂模式,一个类的责任就是实例化另外一个对象,通过组合的方式,而工厂对象使用继承和依赖一个子类去负责对象的实例化
我的理解是:
工厂方法模式有一个创建者(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
最后
以上就是神勇高跟鞋为你收集整理的小谈抽象工厂模式与工厂方法,Abstract Factory Pattern and Factory Method的全部内容,希望文章能够帮你解决小谈抽象工厂模式与工厂方法,Abstract Factory Pattern and Factory Method所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复