Jetpack学习-0-观察者模式&Jetpack简介

观察者模式是什么?
当一个对象被修改时,则会自动通知依赖它的对象,这种行为的模式就是观察者模式。观察者模式属于行为型模式。
比如,警察在监控坏人,一旦坏人做坏事,警察立马知道并做后续操作,在这个例子中,坏人是被观察者,警察是观察者,坏人做了坏事警察立马就知道了。
我们来写这个小例子
坏人类定义:
​
package com.sun.module_0_observer;


import java.util.ArrayList;


/**

 * 小偷  被观察对象
 * 一旦做了坏事,警察会立马知道
*/
public class BadMan {


    /**
     * 负责监控的警察,观察者对象
     */
    private ArrayList<Police> policeMen = new ArrayList<>();

    public int badThing = 0;


    /**
     * 警察开始盯防  观察者加入观察者队列
     * @param police
     */
    public void attach(Police police) {
        policeMen.add(police);
    }

    /**
     * 警察停止盯防 观察者退出观察者队列
     * @param police
     */
    public void unAttach(Police police) {
        policeMen.remove(police);
    }

    /**
     * 触发操作并通知依赖对象
     */
    public void doBadThings() {
        badThing++;
        notifyAllPoliceMen();
    }

    public String getBadThing() {
        return "我干了" + badThing + "件坏事";
    }


    /**
     * 通知观察者
     */
    public void notifyAllPoliceMen() {
        for (Police policeman : policeMen) {
            policeman.catchBadMan(badThing);
        }
    }


}


​
警察的抽象类:
package com.sun.module_0_observer;


/**
 * 警察部门
 */

public interface Police {
    void catchBadMan(int count);


    /**
     * 大喇叭,用来回调信息给activity
     */
    interface Horn {
        void speak(String message);
    }

}
警察的实现类:
​
package com.sun.module_0_observer;


public class PoliceMan1 implements Police {
    //大喇叭对象,用来回调到页面上

    private Horn horn;

    public PoliceMan1(Horn horn) {
        this.horn = horn;
    }


    //收到被观察者通知,并用喇叭通知页面,看到结果
    @Override
    public void catchBadMan(int count) {
        horn.speak("我是" + PoliceMan1.class.getSimpleName() + ",我看到坏人干坏事了" + count);
    }

}


​

页面操作,简单演示观察者模式

​
package com.sun.module_0_observer;
 
import androidx.appcompat.app.AppCompatActivity;
 
import android.media.Image;
import android.os.Bundle;
import android.view.View;
import android.widget.TextView;

import com.alibaba.android.arouter.facade.annotation.Route;
import com.sun.common_library.arouter.ArouterPath;

@Route(path = ArouterPath.Module_0_observer_MainActivity)
public class MainActivity extends AppCompatActivity {

    private BadMan badMan;

    private Police police1;

    private Police police2;

    private Police police3;

    private TextView tv_policeman1;

    private TextView tv_policeman2;

    private TextView tv_policeman3;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main0);
        tv_policeman1 = this.findViewById(R.id.tv_policeman1);
        tv_policeman2 = this.findViewById(R.id.tv_policeman2);
        tv_policeman3 = this.findViewById(R.id.tv_policeman3);
        badMan = new BadMan();
        police1 = new PoliceMan1(new Police.Horn() {
            @Override
            public void speak(String message) {
                tv_policeman1.setText(message);
            }
        });

        police2 = new PoliceMan2(new Police.Horn() {
            @Override
            public void speak(String message) {
                tv_policeman2.setText(message);
            }

        });

        police3 = new PoliceMan3(new Police.Horn() {
            @Override
            public void speak(String message) {
                tv_policeman3.setText(message);
            }
        });

    }

    public void doBadClick(View view) {
        badMan.doBadThings();
    }

    public void attach1Click(View view) {
        tv_policeman1.setText("派出所1已在监控坏人");
        badMan.attach(police1);
    }

    public void unAttach1Click(View view) {
        tv_policeman1.setText("派出所1没有在监控坏人");
        badMan.unAttach(police1);
    }

    public void attach2Click(View view) {
        tv_policeman2.setText("派出所2已在监控坏人");
        badMan.attach(police2);
    }


    public void unAttach2Click(View view) {
        tv_policeman2.setText("派出所2没有在监控坏人");
        badMan.unAttach(police2);
    }

    public void attach3Click(View view) {
        tv_policeman3.setText("派出所3已在监控坏人");
        badMan.attach(police3);
    }


    public void unAttach3Click(View view) {
        tv_policeman3.setText("派出所3没有在监控坏人");
        badMan.unAttach(police3);
    }

}


​

Jetpack离不开观察者模式,所以先简单铺个垫。
Android-Jetpack代码位置: github
Jetpack是什么?
官网定义:Jetpack 是一个由多个库组成的套件,可帮助开发者遵循最佳做法、减少样板代码并编写可在各种 Android 版本和设备中一致运行的代码,让开发者可将精力集中于真正重要的编码工作。
下面就是Jetpack的4种类型

具体表述见下图

实际开发过程中,我们主要学习架构模块( Android Archicture Components 安卓架构组件,简称AAC)
AAC的各个库作用到不同的开发模块功能中,每个流程都安排的妥妥的,见下图

总结:
Android Jetpack其实并不神秘,就是Google觉得全世界的开发者水平参差不齐,各种架构模式等太乱了,然后他自己推出这些库,希望大家遵循这些最佳做法,尽量把心思放在业务层,实现快速稳健开发,这个大体就是推出Jetpack的愿景。
当然,kotlin和jetpack更配,后续会改为kotlin代码。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Mr_Sun_01

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值