设计模式-工厂

一,工厂模式概述

  • 概念
    工厂模式是一种创建者模式,在任何生成复杂对象的地方都可以使用工厂模式。
  • 工厂模式的分类
    简单工厂模式
    工厂模式
    抽象工厂模式

二,简单工厂模式

  • 概念
    简单工厂模式,一个具体工厂负责生产所有具体产品。客户端只需要关注生成的具体产品
  • UML
    image.png

    Factory:表示具体生产产品的工厂类
    Product:抽象产品类
    P1/P2:具体的产品类
  • 代码实例
public abstract class AbstractProduct {
    public abstract void usePhone();
}
public class AndroidPhone extends AbstractProduct {
    @Override
    public void usePhone() {
        Log.e("zjy", "android手机");
    }
}

public class IosPhone extends AbstractProduct {
    @Override
    public void usePhone() {
        Log.e("zjy","ios手机");
    }
}


public class PhoneFactory {
    public AbstractProduct createPhoneProduct(String name) {
        AbstractProduct product = null;
        if ("android".equals(name)) {
            product = new AndroidPhone();
        } else if ("ios".equals(name)) {
            product = new IosPhone();
        }
        return product;
    }
}

 PhoneFactory factory = new PhoneFactory();
 AbstractProduct product1 = (AndroidPhone) factory.createPhoneProduct("android");
        product1.usePhone();
  • 优点
    客户端需要的产品,可以直接得到,逻辑判断在工厂里边
  • 缺点
    扩展性一般,杜宇不在产品族中的产品,无法扩展,获取具体产品的方法存在于工厂中如果需要添加产品,需要修改工厂中的代码

三,工厂模式

  • 概念
    抽象产品,派生出去多种具体的产品.
    抽象工厂,派生出多种产品工厂类.
    具体的工厂负责一种具体的产品.
  • UML
    image.png
  • 代码
  • 优点
    扩展性,能够处理不同产品系列的产品,通过具体的工厂去生成不同产品族的产品,扩展性较好。
  • 缺点
    类的个数较多。另外一个工厂的只能够生产一个具体的产品。

四,抽象工厂模式

  • 概念
    多个抽象产品类
    每个抽象产品类可以派生出多个具体产品类
    一个抽象工厂类,可以派生出多个具体工厂类
    每个具体工厂类可以创建多个具体产品类的实例

五,总结

1.工厂模式是一个创建型的模式
2.在任何使用A a = new A()的情况下,理论上说都能使用工厂模式。
3.在工厂模式分别的对应使用中,简单工厂模式,注重具体生成的产品,而工厂模式,注重的同一个产品下的不同产品族的产品。如栗子中上海大众的汽车和一汽大众的汽车,抽象工厂模式更多事在与整体产品的架构上,不再是单一一个的抽象产品类。
4.工厂模式:一个抽象产品派生出去多个具体的产品,一个抽象工厂派生出多个具体的工厂,而一个具体的工厂对应生成的是一个具体的产品。
5.抽象工厂模式:多个抽象产品分别派生出多个具体的产品,一个抽象工厂派生成出多个具体的工厂,一个工厂对应生成多个具体的产品,这些多个抽象产品之间存在着联系。

你可能感兴趣的:(设计模式-工厂)