第二章 工廠設計模式

工廠設計模式

簡單工廠

  • 對生產對象進行統一管理
  • 對外提供一個可調用的接口。

簡單代碼

 public class Cat {
}
public class Dog {
}

簡單工廠對外輸出

public class SimpleFactory {


  public static Dog getDog() {
    return new Dog();
  }
  public static Cat getCat() {
    return new Cat();
  }

}

調用抽象工廠生產對象

public class Main {

  public static void main(String[] args) {
    Cat cat = SimpleFactory.getCat();
    Dog dog = SimpleFactory.getDog();
  }
}

簡單工廠的缺點

  • StaticFactroy類不斷修改,裏面的方法不斷增多
  • 不符合單一職責原則: 一個類負責了所有類的生產
  • 不符合開閉原則:擴展品類是,需要修改工廠類

工廠方法模式

  • 工廠類抽象出一個接口,對象的創建方法延遲到工廠子類去實現

步驟

  • 工廠方法模式中,將工廠方法抽象出來,成單獨接口
  • 每一個子類只需要實現工廠類
public interface Factory<T> {

  public  T fruit();

}
public class CarFactory  implements  Factory<CarFactory>{

  @Override
  public CarFactory fruit() {
    return new CarFactory();
  }
}
public class ProductFactory implements  Factory<ProductFactory>{
  @Override
  public ProductFactory fruit() {
    return new ProductFactory();
  }
}

public class MainFactory {

  public static void main(String[] args) {
    Factory carFactory = new CarFactory();
    carFactory.fruit();
    Factory productFactory = new ProductFactory();
    productFactory.fruit();
  }
}

抽象工廠

當一個類別的產品還有很多個系列區分

/**
 * 定義抽象工廠
 */
public abstract class AbstractFactory {

  /**
   * 獲取顏色信息
   * @return
   */
  public abstract  String getColor();
  
  public abstract  String getHeight();
}

public class Cat extends AbstractFactory {
  @Override
  public String getColor() {
    return null;
  }

  @Override
  public String getHeight() {
    return null;
  }
}
public class Fruit extends AbstractFactory {
  @Override
  public String getColor() {
    return null;
  }

  @Override
  public String getHeight() {
    return null;
  }
}

public class Cat extends AbstractFactory {
  @Override
  public String getColor() {
    return null;
  }

  @Override
  public String getHeight() {
    return null;
  }
}

public class Main {

  public static void main(String[] args) {
    AbstractFactory cat =  new Cat();
    AbstractFactory fruit =  new Fruit();
  }
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章