首页 > 其他分享 >Android 工厂方法模式

Android 工厂方法模式

时间:2023-11-24 11:01:11浏览次数:43  
标签:void System 模式 public AudiCar Android 工厂 class



文章目录

  • 1、工厂方法模式介绍
  • 2、工厂方法模式的定义
  • 3、使用场景
  • 4、模式的简单实现


1、工厂方法模式介绍

工厂方法模式(Factory Pattern ),是创建型设计模式之一。工厂方法模式是一个结构比较简单的模式。

2、工厂方法模式的定义

就是一个用于创建对象的接口,让子类来决定实体化那个类。

3、使用场景

在任何需要生成复杂对象的地方,都可以使用工厂模式。

4、模式的简单实现

我们以生活中一个例子来说明:
一个汽车厂主要的组装某款SUV车型,有Q3, Q5, Q7, 对于这类车内部结构差异性并不是很大。
因此一条生产线足以应对这3种车型,对于该类生产线工厂提供了一个抽象类定义。

public   abstract   class AudiFactory {

    //某车型的工厂方法
    // clz 具体的suv  型号
    //return 具体的suv 对象

    public abstract  <T extends  AudiCar> T createAudiCar (Class<T> clz);
}

工厂的3中suv 车型可能在主结构上并没有什么差异,因此并没有什么必要为每一种车型都提供一条不同的生产线即可:

//为相似车型设置 同一条生产线
public  class  AudiCarFactory extends  AudiFactory {

    @Override
    public <T extends AudiCar> T createAudiCar(Class<T> clz) {
        AudiCar car = null;
        try {

            car = (AudiCar) Class.forName(clz.getName()).newInstance();

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

定义车的基本功能的 类

//相似车型的基本构成 汽车的抽象产品类
public abstract  class AudiCar {

    public AudiCar () {}
    //定义汽车的一个行为方法, 车可以行走
    public abstract  void drive();

    //定义汽车可以自动巡航
    public abstract void selfNavigation();
}

接下来定义每种具体的车型

//生产具体车型
    public class AudiQ3 extends  AudiCar {

        @Override
        public void drive() {
            System.out.println("Q3 启动了");
        }

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


    public class AudiQ5 extends  AudiCar {

        @Override
        public void drive() {
            System.out.println("Q5 启动了");
        }

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

    public class AudiQ7 extends  AudiCar {

        @Override
        public void drive() {
            System.out.println("Q7 启动了");
        }

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

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

public class ClientClass {
    public static void main(String[] args) {
        //构造一个制造汽车工厂的工厂对象
        AudiFactory factory = new AudiCarFactory();

        //生产 Q3 并启动
        AudiQ3 audiQ3 = factory.createAudiCar(AudiQ3.class);
        audiQ3.drive();
        audiQ3.selfNavigation();

        //生产 Q5 并启动
        AudiQ5 audiQ5 = factory.createAudiCar(AudiQ5.class);
        audiQ5.drive();
        audiQ5.selfNavigation();

        //生产 Q7 并启动
        AudiQ7 audiQ7 = factory.createAudiCar(AudiQ7.class);
        audiQ7.drive();
        audiQ7.selfNavigation();

    }

最后输出结果如下:
Q3 启动了
Q3 开始自动巡航了
Q5 启动了
Q5 开始自动巡航了
Q7 启动了
Q7 开始自动巡航了

(自己在studio上运行,没有实现 ,出现 bug :
10-12 15:27:29.835 21457-21457/com.example.menglux.factorymode W/System.err: java.lang.InstantiationException: can’t instantiate class com.example.menglux.factorymode.ClientActivity$AudiQ3; no empty constructor

在此只做思路整理
工厂模式,简单一点,就是将相同类型的类,通过一个接口来实现 对象的实例化,而不是通过 new.

文献参考:
Android 源码设计模式解析与实战 第二版

本人郑重声明,本博客所编文章、图片版权归权利人持有,本博只做学习交流分享所用,不做任何商业用途。访问者可將本博提供的內容或服务用于个人学习、研究或欣赏,不得用于商业使用。同時,访问者应遵守著作权法及其他相关法律的规定,不得侵犯相关权利人的合法权利;如果用于商业用途,须征得相关权利人的书面授权。若文章、图片的原作者不愿意在此展示內容,请及时通知在下,將及时予以刪除。


标签:void,System,模式,public,AudiCar,Android,工厂,class
From: https://blog.51cto.com/u_15866638/8546170

相关文章

  • Androd 原型模式
    文章目录1、原型模式介绍2、使用场景3、原型模式UML类图4、原型模式的简单实现1)文件结构2)WordDocumentClass.java文件3)ClientActivity.java文件5、浅拷贝和深拷贝1、原型模式介绍1)该模式有一个样板实例,用户从这个样板对象中复制一个内部属性一致的对象。2)复制的实例就是我......
  • Android 单例模式
    文章目录1、单例模式介绍2、单例模式的简单例子3、懒汉模式实现单例模式4、DoubleCheckLock(DLC)实现单例5、静态内部类单例模式6、枚举单例7、使用容器是实现单例模式1、单例模式介绍据说在一个app中,单例对象的类必须保证只有一个实例存在,系统只有一个全局变量存在。2、单......
  • Java设计模式之单例模式
    单例模式(SingletonPattern)是一种常用的设计模式,它用于限制一个类只能创建一个实例,并提供一个全局访问点。在Java中,实现单例模式的关键点包括:私有的构造函数:为了防止其他类创建该类的实例,我们需要将构造函数设为私有。静态的实例变量:我们需要一个静态的变量来存储该类的唯一......
  • java-策略模式
    使用原因:  需求:同一套系统,使用不同的资源,例如A使用阿里的OSS,B使用腾讯的OSS,使用配置的方式实现动态选择哪个资源策略模式示例  做个例子:比如去服装店买衣服,普通会员不打折,黄金会员打9折,铂金会员打8折,钻石会员打7折,这样不同的客户价格计算方式不同,这个时候就可以使用策略模......
  • Android Studio常见问题的解决
    真机调试显示安装包异常在gradle.properties文件最后面加上这一行代码android.injected.testOnly=false以及选择合适的AGP版本,例如选择7.1.2版本,这个版本号可以在build.gradle文件里面修改。gradle下载缓慢的问题在网络防火墙->允许应用通过防火墙->将AndroidStudio添加......
  • Tutorial 19_中介者模式
    实验19:中介者模式本次实验属于模仿型实验,通过本次实验学生将掌握以下内容:1、理解中介者模式的动机,掌握该模式的结构;2、能够利用中介者模式解决实际问题。[实验任务一]:虚拟聊天室在“虚拟聊天室”实例中增加一个新的具体聊天室类和一个新的具体会员类,要求如下:1.新的具体聊......
  • Tutorial 20_备忘录模式
    实验20:备忘录模式本次实验属于模仿型实验,通过本次实验学生将掌握以下内容:1、理解备忘录模式的动机,掌握该模式的结构;2、能够利用备忘录模式解决实际问题。[实验任务一]:多次撤销改进课堂上的“用户信息操作撤销”实例,使得系统可以实现多次撤销(可以使用HashMap、ArrayList等集......
  • Android深入学习之ComponentActivity.registerForActivityResult()方法
    ComponentActivity.startActivityForResult()和ComponentActivity.onActivityResult()已经废弃,如下图所示,取而代之的是统一它俩的ActivityResultLauncher。  ActivityResultLauncher对象可以通过ComponentActivity.registerForActivityResult()方法获取。该方法有两个重载。......
  • Linux文本模式手动配置静态ip ubuntu改ip
    查看当前系统版本cat/etc/os-release查看当前网卡设备名ipaifcofig-a高版本的ubuntu没有interfaces:vim/etc/netplan/xxxxxxnetwork:ethernets:ens33:#配置的网卡的名称addresses:[192.168.8.9/24]#配置的静态ip地址和掩码dhcp4:false......
  • 移动光猫拨号(路由模式)下的IPV6获取方式
    按图设置即可1、设置拨号连接,获取前缀2、将前缀填写到用户侧的IPV6设置里3、测试ipv6 或者:在哪里获取前缀,前缀在哪里出现的 设置完,等候5分钟,去状态页找前缀信息。......