美文网首页
05 Android常见设计模式:工厂方法模式

05 Android常见设计模式:工厂方法模式

作者: 彩虹_直至黑白 | 来源:发表于2021-12-10 19:21 被阅读0次

前言

工厂方法模式是创建型模式,多用于需要生成复杂对象的地方。工厂模式降低了对象之间的耦合度,实例化的任务交由子类去完成,所以具备很好的扩展性。

定义

定义一个用于创建对象的接口,让子类决定实例化哪个类。

简单实现

这里以一个生活中的小例子来说明。小民是一家汽车厂的厂长,对他来说,组装汽车没什么好神秘的,无非就是将一些进口的核心部件,比如发动机和一些国内的零部件组装起来,小民的汽车厂主要就是组装某款SUV车型,比如Q3、Q5、Q7,对于这类车型来说,内部结构差异并不是很大,因此,对小民来说,一条生产线足以应付这3种车型,对于该类生产线小民提供了一个抽象类定义:

public abstract class AbsAudiFactory {

    /**
     * 某车型的工厂方法
     *
     * * @param clazz 具体的SUV型号类型
     *
     * * @return  具体型号的SUV车对象
     */
    public abstract <T extends AudiCar> T createAudiCar(Class<T> clazz);

}

在这里,小民厂里所生产的3种SUV车型可能在主结构上并没有什么差异,因此,对于小民来说没有必要为每一种车型都提供一条不同的生产线,所以一条生产线即可:

public class AudiCarFactory extends AbsAudiFactory {

    @Override
    public <T extends AudiCar> T createAudiCar(Class<T> clazz) {
        AudiCar audiCar = null;
        try {
            audiCar = (AudiCar) Class.forName(clazz.getName()).newInstance();

        } catch (Exception e) {
            e.printStackTrace();
        }
        return (T) audiCar;
    }
}

对于这3种车型,除了一些车都有的基本共性外,还提供了自动巡航功能,类似于无人驾驶,这些功能小民都使用一个抽象的基类来声明:

public abstract class AudiCar {
    /**
       汽车的抽象产品类
     * 定义汽车的一个行为方法 车可以启动开走
     */
    public abstract void drive();

    //定义汽车的一个行为方法 车可以自动巡航
    public abstract void selfNavigation();

}

再接下来就是生产每一种具体的车型了:

//Q3
public class AudiQ3 extends AudiCar {
    @Override
    public void drive() {
        System.out.println(" Q3 启动啦!");
    }

    @Override
    public void selfNavigation() {
        System.out.println(" Q3 开始自动巡航!");
    }
}

//Q5
public class AudiQ5 extends AudiCar{
    @Override
    public void drive() {
        System.out.println(" Q5 启动啦!");
    }

    @Override
    public void selfNavigation() {
        System.out.println(" Q5 开始自动巡航!");
    }
}

//Q7
public class AudiQ7 extends AudiCar{
    @Override
    public void drive() {
        System.out.println(" Q7 启动啦!");
    }

    @Override
    public void selfNavigation() {
        System.out.println(" Q7 开始自动巡航!");
    }
}

最后我们将各个类组装起来形成一条完整的流水线:

public class Client{
    
     public static void main(String[] args) {
         
         AbsAudiFactory factory = new AudiCarFactory();
         AudiQ3 audiQ3 = factory.createAudiCar(AudiQ3.class);
         audiQ3.drive();
         audiQ3.selfNavigation();

         AudiQ5 audiQ5 = factory.createAudiCar(AudiQ5.class);
         audiQ5.drive();
         audiQ5.selfNavigation();

         AudiQ7 audiQ7 = factory.createAudiCar(AudiQ7.class);
         audiQ7.drive();
         audiQ7.selfNavigation();
     }}

输出结果如下:

Q3 启动啦!
Q3 开始自动巡航!
Q5 启动啦!
Q5 开始自动巡航!
Q7 启动啦!
Q7 开始自动巡航

总结

总的来说,工厂方法模式是一个很好的设计模式,在本文多处地方都有对其优点进行总结,但是缺点也是难以避免的,每次我们为工厂方法模式添加新的产品时就要编写一个新的产品类,同时还要引入抽象层,这必然会导致类结构的复杂化,所以,在某些情况比较简单时,是否要使用工厂模式,需要设计者权衡利弊了。

相关文章

  • Android 工厂模式

    Android 工厂模式 Android 23种设计模式 前言 工厂模式是创建型模式,使我们常用/常见的模式之一。...

  • spring 设计模式篇(前)

    设计模式俗称:套路 一、spring常见设计模式 (23种设计模式) 创建型:工厂方法模式、抽象工厂模式、建造者...

  • 简单工厂模式

    Android进阶之设计模式 简单工厂模式 简单工厂模式(又叫作静态工厂方法模式), 其属于创建型设计模式,但并不...

  • 工厂模式-简单工厂模式、工厂方法模式、抽象工厂模式

    工厂模式 工厂模式是一种比较常见的创建型设计模式,分为简单工厂模式、工厂方法模式、抽象工厂模式 工厂模式旨在把对象...

  • 设计模式

    常见的设计模式有哪些? 常见的工厂模式,代理模式,模板方法模式,责任链模式,单例模式,包装设计模式,策略模式等。手...

  • C++ 常见设计模式

    C++ 常见设计模式包括: 工厂模式 简单工厂模式定义工厂创建类,抽象产品,派生产品类 工厂方法模式 抽象工厂模式...

  • 05 Android常见设计模式:工厂方法模式

    前言 工厂方法模式是创建型模式,多用于需要生成复杂对象的地方。工厂模式降低了对象之间的耦合度,实例化的任务交由子类...

  • 01_Spring【IOC+依赖注入】

    工厂模式 工厂模式概述: 工厂模式是一种常见的设计模式。是一种通过工厂方法,代替new操作,帮助我们创建对象的设计...

  • Java面试 设计模式

    1.说说几个常见的设计模式(23种设计模式)? 设计模式分为三大类: 创建型模式,共五种:工厂方法模式、抽象工厂模...

  • Android常用设计模式有哪些?

    Android常用设计模式有哪些? 创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式...

网友评论

      本文标题:05 Android常见设计模式:工厂方法模式

      本文链接:https://www.haomeiwen.com/subject/nhwffrtx.html