亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

Java設計模式 - 抽象工廠

標簽:
Java Android
一、抽象工厂模式

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

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

//定义一个动物类
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;
}

具体可看源码。

本文由慕课网 ifynn原创,转载请注明!

點擊查看更多內容
14人點贊

若覺得本文不錯,就分享一下吧!

評論

作者其他優質文章

正在加載中
移動開發工程師
手記
粉絲
17
獲贊與收藏
653

關注作者,訂閱最新文章

閱讀免費教程

感謝您的支持,我會繼續努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進行掃碼打賞哦
今天注冊有機會得

100積分直接送

付費專欄免費學

大額優惠券免費領

立即參與 放棄機會
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號

舉報

0/150
提交
取消