第二章 工厂设计模式

工厂设计模式

简单工厂

  • 对生产对象进行统一管理
  • 对外提供一个可调用的接口。

简单代码

 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();
  }
}

猜你喜欢

转载自blog.csdn.net/qq_30561643/article/details/104488335
今日推荐