02、工厂模式

2、工厂模式

遵循的原则:

1、简单工厂模式

其实我们最多用的还是简单工厂模式,不过他违反了开闭原则

  • 类实现及类的结构

总结:简单工厂模式,有一个工厂类提供静态方法根据多态的特性返回相应的实例对象!

2、工厂方法模式

优点:实现的开闭原则

但是代码太过冗余

  • 类结构

对比:

  • 代码复杂度: 高
  • 结构复杂度:高
  • 编程复杂度:高
  • 管理复杂度:高

所以我们在实际开发中一般选用简单工厂模式!

3、抽象工厂模式

工厂的工厂叫抽象工厂模式!

有产品族的概念:

手机和路由器有不同的厂家制造,不同的厂家有不同的工厂实现

抽象工厂接口 根据不同实现出不同的工厂,工厂生产不同产品族的产品!

  • 抽象工厂,定义工厂需要生产的东西
package _02factory.abstract1;

/**
 * @author zhangbingbing
 * @version 1.0
 * @date 2020/6/14 23:32
 */
public interface AbstractFactory {
    //生产手机
    Phone createPhone();

    //生产路由器
    Router createRouter();

    //笔记本
    Laptop createLaptop();
}
  • 华为工厂:专门生产华为产品族的东西
package _02factory.abstract1;

/**
 * @author zhangbingbing
 * @version 1.0
 * @date 2020/6/14 23:34
 */

//华为工厂
public class HuaweiFactory implements AbstractFactory {
    @Override
    public Phone createPhone() {
        return new Huawei();	//华为手机
    }

    @Override
    public Router createRouter() {
        return new HuaweiRouter();	//华为路由器
    }

    @Override
    public Laptop createLaptop() {
        //全改
        return new  HuaweiLaptop();		//华为笔记本
    }
}
  • 客户根据不同工厂获取不同产品族的产品
package _02factory.abstract1;

/**
 * @author zhangbingbing
 * @version 1.0
 * @date 2020/6/14 23:34
 */
public class Client {
    public static void main(String[] args) {
        System.out.println("=================苹果系列产品==========");
        AbstractFactory factory = new AppleFactory();
        Phone phone = factory.createPhone();
        Router router = factory.createRouter();
        phone.sing();
        router.wifi();
        System.out.println("=================华为系列产品==========");
        AbstractFactory factory2 = new HuaweiFactory();
        phone = factory2.createPhone();
        router = factory2.createRouter();
        phone.sing();
        router.wifi();
    }
}

总结

  1. 违反了开闭原则,牵一发动全身,所以我们一般用于稳定的类的构建!
  2. 应用条件:当我们不需要关心对象的具体实现,可以让工厂给我们生产!
posted @ 2020-06-15 19:02  贝加尔湖畔╭  阅读(139)  评论(0编辑  收藏  举报