设计模式之八S:抽象工厂模式(Abstract Factory Pattern)
2013-05-02 17:41
603 查看
GOF 在《设计模式》:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。
1:抽象工厂模式可以向客户端提供一个接口,使得客户端在不必指定产品的具体类型的情况下,创建多个产品族中的产品对象。这就是抽象工厂模式的用意。
2:抽象工厂模式是所有形态的工厂模式中最为抽象和最具一般性的一种形态。
3:抽象工厂模式与工厂方法模式的最大区别就在于,工厂方法模式针对的是一个产品等级结构;而抽象工厂模式则需要面对多个产品等级结构。
工厂方法模式:一个抽象产品类,可以派生出多个具体产品类。
一个抽象工厂类,可以派生出多个具体工厂类。 每个具体工厂类只能创建一个具体产品类的实例。
抽象工厂模式:
多个抽象产品类,每个抽象产品类可以派生出多个具体产品类。 一个抽象工厂类,可以派生出多个具体工厂类。 每个具体工厂类可以创建多个具体产品类的实例。
区别:工厂方法模式只有一个抽象产品类,而抽象工厂模式有多个。
工厂方法模式的具体工厂类只能创建一个具体产品类的实例,而抽象工厂模式可以创建多个。
//抽象工厂角色:工厂接口
public interface Gardener {
public Fruit createFruit(String name);
public Veggie createVeggie(String name);
}
//抽象水果产品角色:水果接口
public interface Fruit {
}
// 抽象蔬菜产品角色:蔬菜接口
public interface Veggie {
}
//具体产品角色:热带水果
public class TropicalFruit implements Fruit {
private String name;
public TropicalFruit(String name) {
System.out.println("热带工厂为您创建了:热带水果-"+name);
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
//具体产品角色:热带蔬菜
public class TropicalVeggie implements Veggie {
private String name;
public TropicalVeggie(String name) {
System.out.println("热带工厂为您创建了:热带水果-"+name);
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
//具体产品角色:亚热带水果
public class NorthernFruit implements Fruit {
private String name;
public NorthernFruit(String name) {
System.out.println("亚热带工厂为您创建了:亚热带水果-"+name);
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
//具体产品角色:亚热带蔬菜
public class NorthernVeggie implements Veggie {
private String name;
public NorthernVeggie(String name) {
System.out.println("亚热带工厂为您创建了:亚热带蔬菜-"+name);
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
//具体工厂角色:热带工厂
public class TropicalGardener implements Gardener {
public Fruit createFruit(String name) {
return new TropicalFruit(name);
}
public Veggie createVeggie(String name) {
return new TropicalVeggie(name);
}
}
//具体工厂角色:亚热带工厂
public class NorthernGardener implements Gardener {
public Fruit createFruit(String name) {
return new NorthernFruit(name);
}
public Veggie createVeggie(String name) {
return new NorthernVeggie(name);
}
}
//工厂模式--抽象工厂模式--一般性模式(农场应用)
public class TestFactoryPattern {
private void test(){
Veggie tv,nv;
Fruit tf,nf;
TropicalGardener tropicalGardener=new
TropicalGardener();
NorthernGardener northernGardener=new NorthernGardener();
tv=tropicalGardener.createVeggie("热带南瓜");
nv=northernGardener.createVeggie("北京菠菜");
tf=tropicalGardener.createFruit("新加坡龙眼");
nf=northernGardener.createFruit("河北苹果");
}
public static void main(String args[]){
TestFactoryPattern testFactoryPattern =
new TestFactoryPattern();
testFactoryPattern.test();
}
}
http://blog.csdn.net/jason0539/article/details/23020989
http://blog.csdn.net/bboyfeiyu/article/details/23939903 //android 工厂模式
http://www.cnblogs.com/qianxudetianxia/archive/2011/08/20/2147011.html
1:抽象工厂模式可以向客户端提供一个接口,使得客户端在不必指定产品的具体类型的情况下,创建多个产品族中的产品对象。这就是抽象工厂模式的用意。
2:抽象工厂模式是所有形态的工厂模式中最为抽象和最具一般性的一种形态。
3:抽象工厂模式与工厂方法模式的最大区别就在于,工厂方法模式针对的是一个产品等级结构;而抽象工厂模式则需要面对多个产品等级结构。
工厂方法模式:一个抽象产品类,可以派生出多个具体产品类。
一个抽象工厂类,可以派生出多个具体工厂类。 每个具体工厂类只能创建一个具体产品类的实例。
抽象工厂模式:
多个抽象产品类,每个抽象产品类可以派生出多个具体产品类。 一个抽象工厂类,可以派生出多个具体工厂类。 每个具体工厂类可以创建多个具体产品类的实例。
区别:工厂方法模式只有一个抽象产品类,而抽象工厂模式有多个。
工厂方法模式的具体工厂类只能创建一个具体产品类的实例,而抽象工厂模式可以创建多个。
//抽象工厂角色:工厂接口
public interface Gardener {
public Fruit createFruit(String name);
public Veggie createVeggie(String name);
}
//抽象水果产品角色:水果接口
public interface Fruit {
}
// 抽象蔬菜产品角色:蔬菜接口
public interface Veggie {
}
//具体产品角色:热带水果
public class TropicalFruit implements Fruit {
private String name;
public TropicalFruit(String name) {
System.out.println("热带工厂为您创建了:热带水果-"+name);
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
//具体产品角色:热带蔬菜
public class TropicalVeggie implements Veggie {
private String name;
public TropicalVeggie(String name) {
System.out.println("热带工厂为您创建了:热带水果-"+name);
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
//具体产品角色:亚热带水果
public class NorthernFruit implements Fruit {
private String name;
public NorthernFruit(String name) {
System.out.println("亚热带工厂为您创建了:亚热带水果-"+name);
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
//具体产品角色:亚热带蔬菜
public class NorthernVeggie implements Veggie {
private String name;
public NorthernVeggie(String name) {
System.out.println("亚热带工厂为您创建了:亚热带蔬菜-"+name);
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
//具体工厂角色:热带工厂
public class TropicalGardener implements Gardener {
public Fruit createFruit(String name) {
return new TropicalFruit(name);
}
public Veggie createVeggie(String name) {
return new TropicalVeggie(name);
}
}
//具体工厂角色:亚热带工厂
public class NorthernGardener implements Gardener {
public Fruit createFruit(String name) {
return new NorthernFruit(name);
}
public Veggie createVeggie(String name) {
return new NorthernVeggie(name);
}
}
//工厂模式--抽象工厂模式--一般性模式(农场应用)
public class TestFactoryPattern {
private void test(){
Veggie tv,nv;
Fruit tf,nf;
TropicalGardener tropicalGardener=new
TropicalGardener();
NorthernGardener northernGardener=new NorthernGardener();
tv=tropicalGardener.createVeggie("热带南瓜");
nv=northernGardener.createVeggie("北京菠菜");
tf=tropicalGardener.createFruit("新加坡龙眼");
nf=northernGardener.createFruit("河北苹果");
}
public static void main(String args[]){
TestFactoryPattern testFactoryPattern =
new TestFactoryPattern();
testFactoryPattern.test();
}
}
http://blog.csdn.net/jason0539/article/details/23020989
http://blog.csdn.net/bboyfeiyu/article/details/23939903 //android 工厂模式
http://www.cnblogs.com/qianxudetianxia/archive/2011/08/20/2147011.html
相关文章推荐
- 极速理解设计模式系列:4.抽象工厂模式(Abstract Factory Pattern)
- 设计模式 - Abstract Factory Pattern(抽象工厂模式)
- Net设计模式实例之抽象工厂模式(Abstract Factory Pattern)
- Net设计模式之抽象工厂模式(Abstract Factory Pattern)(1)
- 设计模式——抽象工厂模式(AbstractFactoryPattern)
- 23种设计模式之-----抽象工厂模式(AbstractFactory pattern)
- Net设计模式之抽象工厂模式(Abstract Factory Pattern)(2) 推荐
- 设计模式学习总结-抽象工厂模式(Abstract Factory Pattern)
- 设计模式学习笔记--抽象工厂模式(Abstract Factory Pattern)【创建型模式】
- 设计模式--抽象工厂模式【 Abstract Factory Pattern】
- C#设计模式——抽象工厂模式(Abstract Factory Pattern)
- C#设计模式——抽象工厂模式(Abstract Factory Pattern)
- 设计模式--2: Net设计模式实例之抽象工厂模式(Abstract Factory Pattern)
- 浅谈 java 设计模式--抽象工厂模式(AbstractFactory pattern)
- JAVA设计模式之 抽象工厂模式【Abstract Factory Pattern】
- 您的设计模式——抽象工厂模式【Abstract Factory Pattern 】
- 设计模式------抽象工厂模式(AbstractFactoryPattern)
- JAVA设计模式之 抽象工厂模式【Abstract Factory Pattern】
- 设计模式(6)——抽象工厂模式(Abstract Factory Pattern,创建型)
- c++设计模式:抽象工厂模式(Abstract Factory Pattern)