首页 > 其他分享 >Android 抽象工厂模式

Android 抽象工厂模式

时间:2023-11-24 11:01:24浏览次数:29  
标签:10 package public 抽象 Android 工厂 com lum abstortefactory



文章目录

  • 1、抽象工厂模式介绍
  • 2、抽象工厂模式的定义
  • 3、抽象工厂模式的使用场景
  • 4、抽象工厂模式的简单实现
  • 5、小结


1、抽象工厂模式介绍

抽象工厂模式也是创建型模式之一,抽象工厂模式起源于对不同操作系统的图形化解决方案,如不同操作系统的按钮和文本框控件及其实现。

2、抽象工厂模式的定义

为创建一组相关或者相互依赖的对象提供接口,而不需要具体指定他们的具体类。

3、抽象工厂模式的使用场景

一个对象有相同的约束时可以使用抽象工厂模式。

4、抽象工厂模式的简单实现

以车厂为例,Q3, Q5, Q7, 虽然是一个车系,但是两者之间的零部件差别很大,
1)Q3 发动机 国产 ; Q7 发动机 原装进口
2)Q3 轮胎 普通轮胎 ; Q7 越野轮胎
3) Q3 比较普通的制动系统 ; Q7 制动性极好的制动系统

Q3 Q7 虽然是 同一种的产品类型,但是发动机 轮胎 制动性 都不一样,

这时候就使用到了抽象工厂模式,首先工厂需要生产 轮胎 、 发动机 、 制动系统 这三部分组件。

代码架构 :

Android     抽象工厂模式_android

  1. 先建立一个抽象车厂类 CarFactory

(1)先创建 一个 汽车工厂类,用来生产同型号的汽车,说白了 就是 Q3 Q5 Q7 各自继承
(2)由于是同类型的车但是 里面的零件会不同,所以我们把类里添加 不同的 零件对象 类

package com.example.lum.abstortefactory;

/**
 * Created by lum on 2018/10/13.
 */


//创建一个汽车工厂 抽象一个汽车工厂类
public abstract class CarFactory {
    //生产轮胎
    public abstract  ITire createTire();   //返回 轮胎对象

    //生产发动机
    public abstract  IEngin createEngine();  //返回 发动机对象

    //生产制动系统
    public abstract  IBrake createBrake();  //返回 制动系统 对象

}

这里我们为每一个零件定义一个接口,并分别创建两个不同的实现类表示不同的零部件产品

5) 轮胎接口 以及 相关类
(1) 轮胎接口

package com.example.lum.abstortefactory;

/**
 * Created by lum on 2018/10/13.
 */

public interface ITire {

    //轮胎接口
    void tire();
}

(2)普通轮胎类

package com.example.lum.abstortefactory;

/**
 * Created by lum on 2018/10/13.
 */

public class NormalTire implements  ITire {
    @Override
    public void tire() {
        System.out.println("普通轮胎");
    }
}

(3)越野轮胎类

package com.example.lum.abstortefactory;

/**
 * Created by lum on 2018/10/13.
 */

public class SUVTire implements  ITire {
    @Override
    public void tire() {
        System.out.println("越野轮胎");
    }
}

6)发动机接口 以及相关类
(1)发动机 接口

package com.example.lum.abstortefactory;

/**
 * Created by lum on 2018/10/13.
 */

public interface IEngin {
    //发动机
    void engine();
}

(2)国产发动机 类

package com.example.lum.abstortefactory;

/**
 * Created by lum on 2018/10/13.
 */

public class DomesticEngin implements  IEngin {
    @Override
    public void engine() {
        System.out.println("国产发动机");
    }
}

(3)进口发动机类

package com.example.lum.abstortefactory;

/**
 * Created by lum on 2018/10/13.
 */

public class ImportEngin implements  IEngin {
    @Override
    public void engine() {
        System.out.println("进口发动机");
    }
}

7)制动系统接口 以及 相关类
(1)制动系统接口

package com.example.lum.abstortefactory;

/**
 * Created by lum on 2018/10/13.
 */

public interface  IBrake {
    //制动系统
    void  brake();
}

(2)普通的制动系统

package com.example.lum.abstortefactory;

/**
 * Created by lum on 2018/10/13.
 */

public class NormalBrake implements  IBrake {
    @Override
    public void brake() {
        System.out.println("普通制动");
    }
}

(3)高级的制动系统

package com.example.lum.abstortefactory;

/**
 * Created by lum on 2018/10/13.
 */

public class SeniorBrake implements  IBrake {
    @Override
    public void brake() {
        System.out.println("高级制动");
    }
}

8)具体的 不同的生产 车厂 Q3 生产厂

package com.example.lum.abstortefactory;

/**
 * Created by lum on 2018/10/13.
 */


//对于 Q3工厂 使用其他的 零部件不同
public class Q3Factory extends  CarFactory {
    @Override
    public ITire createTire() {
        return new NormalTire();    //返回普通的轮胎类
    }

    @Override
    public IEngin createEngine() {
        return  new DomesticEngin(); //返回国产发动机
    }

    @Override
    public IBrake createBrake() {
        return new NormalBrake(); //返回一般制动
    }
}

9)具体的 不同的生产 车厂 Q7 生产厂

package com.example.lum.abstortefactory;

/**
 * Created by lum on 2018/10/13.
 */


// Q7  车生产类
public class Q7Factory extends CarFactory {
    @Override
    public ITire createTire() {
        return new SUVTire(); //返回SUV 车胎
    }

    @Override
    public IEngin createEngine() {
        return new ImportEngin(); //返回进口轮胎
    }

    @Override
    public IBrake createBrake() {
        return  new SeniorBrake(); //返回高级制动
    }
}

10) 客户类 具体的实例化调用 生产

package com.example.lum.abstortefactory;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //构造一个生产Q3 的工厂
        CarFactory factoryQ3 = new Q3Factory();
        factoryQ3.createTire().tire();
        factoryQ3.createEngine().engine();
        factoryQ3.createBrake().brake();


        //构造一个 生产Q7 的 工厂
        CarFactory factoryQ7 = new Q7Factory();
        factoryQ7.createTire().tire();
        factoryQ7.createEngine().engine();
        factoryQ7.createBrake().brake();
    }
}

最后运行的结果显示:

Android     抽象工厂模式_ide_02

可以看出 Q3 Q7 使用的是不同的 零件组装。

5、小结

1)适用于相同 类型 内部不同方法时 使用
2)不容易扩展

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

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


标签:10,package,public,抽象,Android,工厂,com,lum,abstortefactory
From: https://blog.51cto.com/u_15866638/8546167

相关文章

  • Android 工厂方法模式
    文章目录1、工厂方法模式介绍2、工厂方法模式的定义3、使用场景4、模式的简单实现1、工厂方法模式介绍工厂方法模式(FactoryPattern),是创建型设计模式之一。工厂方法模式是一个结构比较简单的模式。2、工厂方法模式的定义就是一个用于创建对象的接口,让子类来决定实体化那个类。3......
  • Android 单例模式
    文章目录1、单例模式介绍2、单例模式的简单例子3、懒汉模式实现单例模式4、DoubleCheckLock(DLC)实现单例5、静态内部类单例模式6、枚举单例7、使用容器是实现单例模式1、单例模式介绍据说在一个app中,单例对象的类必须保证只有一个实例存在,系统只有一个全局变量存在。2、单......
  • Android Studio常见问题的解决
    真机调试显示安装包异常在gradle.properties文件最后面加上这一行代码android.injected.testOnly=false以及选择合适的AGP版本,例如选择7.1.2版本,这个版本号可以在build.gradle文件里面修改。gradle下载缓慢的问题在网络防火墙->允许应用通过防火墙->将AndroidStudio添加......
  • Android深入学习之ComponentActivity.registerForActivityResult()方法
    ComponentActivity.startActivityForResult()和ComponentActivity.onActivityResult()已经废弃,如下图所示,取而代之的是统一它俩的ActivityResultLauncher。  ActivityResultLauncher对象可以通过ComponentActivity.registerForActivityResult()方法获取。该方法有两个重载。......
  • Android 混淆打包后gson报错Missing type parameter
    原文:Android混淆打包后gson报错Missingtypeparameter-Stars-One的杂货小窝记录一个简单的bug在代码中使用了gson将json转为list:valjson=""valplanList=gson.fromJson<List<PrayerPlan>>(json,object:TypeToken<List<PrayerPlan>>(){}.type)然后线上的时候......
  • IoT数字孪生智慧工厂
      数字孪生是资产或系统的实时虚拟模型,它使用来自连接的物联网传感器的数据来创建数字表示。数字孪生允许您从任何地方实时监控设备、资产或流程。数字孪生用于多种目的,例如分析性能、监控问题或在实施之前运行测试。从物联网数字孪生中获得的见解使用户能够快速做出反应,以提高......
  • 【Android 逆向】frida 检测绕过
    参考地址:1.aaa.apk安装到手机,是一个叫玩吧的应用./hooker......23248浏览器com.browser2345_oem32541玩吧com.wodi.who......
  • 【Android R】manualTests#com.android.cts.verifier.security.FingerprintBoundKeysT
    异常日志:11-1219:24:47.64953875387DAndroidRuntime:ShuttingdownVM11-1219:24:47.67153875387EAndroidRuntime:FATALEXCEPTION:main11-1219:24:47.67153875387EAndroidRuntime:Process:com.android.cts.verifier,PID:538711-1219:24:47.6715387......
  • 工业智造探索者的数字化之旅:钢丝增强液压胶管工厂数字化探析
    上周在拜访一家生产钢丝增强液压胶管的工厂时,我们遇到了该工厂财务部门的大姐。她分享了工厂管理的一些问题,主要集中在原材料和成品的出入库管理上。这些问题在市场竞争激烈、材料价格波动较大的环境下,尤其凸显出来。她担心工厂的稳定盈利受到了挑战,因为生产环节似乎没有随市场行......
  • 学习随笔(设计模式:抽象工厂模式)
    内容今天学习了抽象工厂模式。1.抽象工厂模式提供一个创建一系列相关或相互依赖对象的接口,而无需指定他们具体的类。2.听起来有一些复杂,主要实现的功能就是在尽可能保证开放-封闭的原则下兼容具体的抽象动作。3.最终可以采用配置文件+反射+抽象工厂来实现对抽象产品的设......