php

一、工厂模式

2020-04-27  本文已影响0人  RainySpring

工厂类拥有一个工厂方法(create),接受了一个参数,通过不同的参数实例化不同的产品类。

  1. 简单工厂模式
public class AnimalFactory {
//简单工厂设计模式(负担太重、不符合开闭原则)
public static Animal createAnimal(String name){
if ("cat".equals(name)) {
  return new Cat();
}else if ("dog".equals(name)) {
  return new Dog();
}else if ("cow".equals(name)) {
  return new Dog();
}else{
  return null;
}
}
}
//该简单工厂,也称为静态方法工厂
public class AnimalFactory2 {
  public static Dog createDog(){
    eturn new Dog();
  }
  public static Cat createCat(){
    return new Cat();
    }
}
  1. 工厂方法模式

抽象工厂是应对产品族概念的。

抽象出来的工厂对象,

// 抽象出来的动物工厂----它只负责生产一种产品
public abstract class AnimalFactory {
// 工厂方法
public abstract Animal createAnimal();
}

我们可以定义根据这个产品族里具体的产品类型去设计子类工厂,

// 具体的工厂实现类1
public class CatFactory extends AnimalFactory {
  @Override
  public Animal createAnimal() {
    return new Cat();
  }
}


// 具体的工厂实现类2
public class DogFactory extends AnimalFactory {
  @Override
  public Animal createAnimal() {
    return new Dog();
  }
}

总结,
很明显,简单工厂的特点就是“简单粗暴”,通过一个含参的工厂方法,我们可以实例化任何产品类,上至飞机火箭,下至土豆面条,无所不能。所以简单工厂有一个别名:上帝类。
任何”东西“的子类都可以被生产,负担太重。当所要生产产品种类非常多时,工厂方法的代码量可能会很庞大。在遵循开闭原则(对拓展开放,对修改关闭)的条件下,简单工厂对于增加新的产品,无能为力。因为增加新产品只能通过修改工厂方法来实现。
抽象工厂模式增加了扩展性。

上一篇下一篇

猜你喜欢

热点阅读