Android最全Android设计模式——工厂模式和抽象工厂模式,2024年最新3年Android开发工程师面试经验分享

总结

最后为了帮助大家深刻理解Android相关知识点的原理以及面试相关知识,这里放上相关的我搜集整理的14套腾讯、字节跳动、阿里、百度等2021面试真题解析,我把技术点整理成了视频和PDF(实际上比预期多花了不少精力),包知识脉络 + 诸多细节。

2020面试真题解析
腾讯面试真题解析

阿里巴巴面试真题解析

字节跳动面试真题解析
网上学习 Android的资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。希望这份系统化的技术体系对大家有一个方向参考。

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!


public class AppleFactory extends Factory {

    @Override

    public <T extends Apple> T produceApple(Class<T> clz) {

        Apple apple = null;

        try {

            //这儿使用了反射机制

            apple = (Apple) Class.forName(clz.getName()).newInstance();

        } catch (Exception e) {

            e.printStackTrace();

        }

        return (T) apple;

    }

}


//如果你不想用反射机制,就酱紫判断吧,或者单独创建生产红苹果和绿苹果的工厂

@Override

public <T extends Apple> T produceApple(Class<T> clz) {

    Apple apple = null;

    if ("RedApple".equals(clz.getSimpleName())){

        apple = new RedApple();

    }else if("GreenApple".equals(clz.getSimpleName())){

        apple = new GreenApple();

    }

    return (T) apple;

}

4,最后就是使用了,创建一个工厂,工厂分别生产了红苹果和绿苹果,并调用了采摘苹果的方法


Factory factory = new AppleFactory();

factory.produceApple(RedApple.class).pluckApple();//打印的是 摘的是红苹果

factory.produceApple(GreenApple.class).pluckApple();//打印的是 摘的是绿苹果

简单说下我自己的理解:

工厂模式需要:产品、工厂、客户端。

首先,红苹果和绿苹果都需要采摘,所以有个苹果的抽象类,并有采摘的抽象方法。

然后,需要一个厂家来生产苹果,可以通过约定来生产不同的苹果。

最后,客户端通过工厂来生成不同的苹果就好。

备注:在工厂创建产品时,我用的是反射机制实现的。如果不想用反射机制,那当产品比较多时,判断的逻辑就会很长,这时候,就可以用工厂方法模式解决了(我就不写这个模式了,懒癌犯了),工厂方法模式简单说就是解决产品过多的问题,就是创建不同的苹果工厂继承Factory,我举得例子里只是创建了一个苹果工厂,在这一个苹果工厂里判断是生成哪个产品。但如果创建了不同的苹果工厂,那就不用进行逻辑判断了,当新增产品时,不需要修改代码,直接新增一个产品的工厂就好,符合面向对象编程的开放封闭原则。

抽象工厂模式:

1,要创造个机器人产品,并抽象出它的零件底盘和语音系统


public interface Rebot {

     interface BasePlate{

         void walk();

     }

     interface Mouse{

         void talk();

     }

}

2,底盘有圆的和方的


public class CircleBasePlate implements Rebot.BasePlate {

    @Override

    public void walk() {

        Log.d("CircleBasePlate","调用了圆底盘的walk方法");

    }

}


public class RectangleBasePlate implements Rebot.BasePlate {

    @Override

    public void walk() {

        Log.d("RectangleBasePlate","调用了方底盘的walk方法");

    }

}

3,语音系统有适合大机器人的和小机器人的


public class BigMouse implements Rebot.Mouse {

    @Override

    public void talk() {

        Log.d("BigMouse","大机器人在说话");

    }

}


public class SmallMouse implements Rebot.Mouse {

    @Override

    public void talk() {

        Log.d("SmallMouse","小机器人在说话");

    }

}

4,建工厂,需要生产底盘和语音系统


public abstract class Factory2 {

    public abstract Rebot.BasePlate createBasePlate(Class clz);

    public abstract Rebot.Mouse createMouse(Class clz);

}

5,工厂实现类


public class RebotFactory extends Factory2{



    @Override

    public Rebot.BasePlate createBasePlate(Class clz) {

        Rebot.BasePlate basePlate = null;

        try {

            basePlate = (Rebot.BasePlate) Class.forName(clz.getName()).newInstance();

        } catch (Exception e) {

            e.printStackTrace();

        }

        return basePlate;

    }



### Android高级架构师

由于篇幅问题,我呢也将自己当前所在技术领域的各项知识点、工具、框架等汇总成一份技术路线图,还有一些架构进阶视频、全套学习PDF文件、面试文档、源码笔记。

*   **330页PDF Android学习核心笔记(内含上面8大板块)**

![](https://img-blog.csdnimg.cn/img_convert/45a8d46385a65d41c94f17d61cfc369f.webp?x-oss-process=image/format,png)

![](https://img-blog.csdnimg.cn/img_convert/267a86396c1a175f923dfd4dbbc95785.webp?x-oss-process=image/format,png)

*   **Android学习的系统对应视频**

*   **Android进阶的系统对应学习资料**

![](https://img-blog.csdnimg.cn/img_convert/a2939b917a9c639904dc8bf4ecd5e59c.webp?x-oss-process=image/format,png)

*   **Android BAT部分大厂面试题(有解析)**

![](https://img-blog.csdnimg.cn/img_convert/11a12536bc0f6a09c92df36eec940755.webp?x-oss-process=image/format,png)


好了,以上便是今天的分享,希望为各位朋友后续的学习提供方便。觉得内容不错,也欢迎多多分享给身边的朋友哈。




**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**

**[需要这份系统化学习资料的朋友,可以戳这里获取](https://bbs.csdn.net/topics/618156601)**

**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**

07854)]


好了,以上便是今天的分享,希望为各位朋友后续的学习提供方便。觉得内容不错,也欢迎多多分享给身边的朋友哈。




**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**

**[需要这份系统化学习资料的朋友,可以戳这里获取](https://bbs.csdn.net/topics/618156601)**

**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值