java 抽象工厂_Java设计模式,抽象工厂

一、抽象工厂模式

抽象工厂模式是工厂方法模式的升级版,工厂方法中的每一个具体的工厂类负责生产一种对应的产品,而抽象工厂模式中的一个具体的工厂类负责的是生产一个产品线上的一个或多个产品。相对来说,抽象工厂模式不易扩展商品,但易扩展生产商品线的工厂类,也就是说商品线易扩展。

来看看工厂方法中产品的扩展:

//定义一个动物类

public interface Anim {

void eat();

}

//定义一个动物工厂类

public interface AnimFactory {

Anim create();

}

//增加一个动物:鸟

public class Bird implements Anim {

public void eat() {

//....

}

}

//创建鸟的具体工厂类

public BirdFactory implements AnimFactory {

public static Bird create() {

return new Bird();

}

}

我们可以看到,每个具体的工厂类只负责生产一个具体的商品,当新增商品时,只需要新增一个具体的工厂类即可,扩展性很高。

而对于抽象工厂方法:

//定义一个动物类

public interface Anim {

void eat();

}

//定义一个动物工厂类

public interface AnimFactory {

Anim createBird();

Anim createFish();

}

//增加一个动物:鸟

public class Bird implements Anim {

public void eat() {

//....

}

}

//增加一个动物:鱼

public class Fish implements Anim {

public void eat() {

//....

}

}

//创建具体工厂类:饲养场A

public FactoryA implements AnimFactory {

public static Bird createBird() {

return new Bird();

}

public static Fish createFish() {

return new Fish();

}

}

从中我们可以看到,一个产品线上的产品:鸟和鱼,被一个饲养场生产出来,而如果有第二个饲养场饲养这个产品线上的动物,只需要实现AnimFactory接口即可,所以扩展产品线非常简单,而一旦产品线上的产品需要增加时,就变成了“毒瘤代码”,AnimFactory需要新增创建新产品的方法,而其具体的实现类FactoryA、FactoryB...也需要做相应的修改,代价太大。

以上便是工厂方法模式和抽象工厂模式的最大区别。

二、 jdk中的抽象工厂模式

jdk中连接数据库的代码是典型的抽象工厂模式,每一种数据库只需提供一个统一的接口:Driver(工厂类),并实现其中的方法即可。不管是jdbc还是odbc都能够通过扩展产品线来达到连接自身数据库的方法。

public interface Driver {

Connection connect(String url, java.util.Properties info)

throws SQLException;

boolean acceptsURL(String url) throws SQLException;

DriverPropertyInfo[] getPropertyInfo(String url, java.util.Properties info)

throws SQLException;

int getMajorVersion();

int getMinorVersion();

boolean jdbcCompliant();

public Logger getParentLogger()

throws SQLFeatureNotSupportedException;

}

具体可看源码。

本文由 知我者乎 原创,未经许可,不得转载!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值