美文网首页
任务拆分、分配的前置条件:代码充分解耦(2)

任务拆分、分配的前置条件:代码充分解耦(2)

作者: 王小贱_ww | 来源:发表于2017-07-08 13:11 被阅读29次

在上篇文章中讲到,代码需要充分解耦,像GPS、sensor和序列化工具这些变化的东西,我们通过外面配置来驱动业务,避免使用hard code。例如:GPS我们是用百度呢还是高德呢,我们用TripSetting来设置,这个Setting可以从服务端获取到,存储到本地,那么这个Setting应该和谁绑定呢,因为GPSTracker外层是TripTracker,所有我们setting和triptracker是一对一的对应关系。

public class TripManager {

    private TripTracker mTracker;
    private TripSetting mSettings;

    public void startTrip() {
        mTracker = new TripTracker(mSettings);
        mTracker.startTracker();
    }


    public void stopTrip() {
        mTracker.stopTracker();
    }
}
在TripTracker中,我们利用Builder模式来设置参数,把GpsTracker的构造函数改成private,不让从外面进行实例化,这样就能避免参数设置问题,防止少设置参数。
 public void startTracker() {


        gpsTracker = new GpsTracker.Builder().setOnGpsChangedListener(this).
                setUserGps(true).
                setUseNetwork(true).
                setType(mSettings.gpsType).build();
        gpsTracker.startLocation();


        sensorTracker = new SensorTracker.Builder().setOnSensorChangedListener(this).
                setSensorType(mSettings.sensorTypes).
                setSamplePeriodUs(mSettings.samplingPeriodUs).build();
        sensorTracker.startSensor();

        mtripWriter = new TripWriter();
    }
GpsTrackerl里面的Builder模式
public class GpsTracker {

    private onGpsChangedListener mlistener;
    private boolean mUserGps;
    private boolean mUseNetwork;
    private int type;

    private GpsTracker(Builder builder) {
        type = builder.type;
    }

    public void startLocation() {

    }

    public void stopLocation() {

    }

    public static class GpsEntity {
        public int timestamp;
        public long lat;
        public long lan;

    }

    interface onGpsChangedListener {
        void onGpsChanged(GpsEntity gpsEntity);
    }

    public static class Builder {
        private boolean userGps;
        private boolean useNetwork;
        private int type;
        private onGpsChangedListener mlistener;


        public Builder setOnGpsChangedListener(onGpsChangedListener listener) {
            this.mlistener = listener;
            return this;
        }

        public Builder setUserGps(boolean userGps) {
            this.userGps = userGps;
            return this;
        }

        public Builder setUseNetwork(boolean useNetwork) {
            this.useNetwork = useNetwork;
            return this;
        }

        public Builder setType(int type) {
            this.type = type;
            return this;

        }

        public GpsTracker build() {
            return new GpsTracker(this);
        }
    }
}
解耦不?解耦。。。。可以分配任务了。。。哈哈

相关文章

  • 任务拆分、分配的前置条件:代码充分解耦(2)

    在上篇文章中讲到,代码需要充分解耦,像GPS、sensor和序列化工具这些变化的东西,我们通过外面配置来驱动业务,...

  • 任务拆分、分配的前置条件:代码充分解耦

    OOP阶段 任务分配任务分配过程中,我们肯定要做到开发人员并行工作,相互之间没有影响,高内聚、低耦合,不能等一个开...

  • 任务分配下去,担子也分解了!

    任务分配下去,担子也分解了!

  • 微服务的拆分与组件

    目录 一、微服务 1、服务化拆分的两种姿势 2、服务化拆分的前置条件 二、微服务组件 1、服务描述 2、注册中心 ...

  • 面试准备第七篇

    组件化 1.组件化有什么好处? 1.1业务分层,解耦,使代码变得可维护; 1.2有效的拆分,组织日益庞大的工程代码...

  • iOS面试个人总结(2)

    组件化 1.组件化有什么好处? 业务分层、解耦,使代码变得可维护; 有效的拆分、组织日益庞大的工程代码,使工程目录...

  • App组件化

    优点 业务分层、解耦,使代码变得可维护;有效的拆分、组织日益庞大的工程代码,使工程目录变得可维护;便于各业务功能拆...

  • 函数式编程(Python)

    函数式编程的思想其实就是, 将一大段代码拆分成函数, 通过函数来实现一层逻辑一层逻辑的调用, 使得复杂的任务被分解...

  • c++基本知识:代码框架

    代码拆分解释 例子: #号是指预处理指令,include指令不是必须的 iostream: io: input...

  • 反省与思考第40天

    责任分配矩阵,顾名思义就是进行任务分配或责任分配的工具。战略解码过程,看起来是指标分解的过程,本质上是任务和责任逐...

网友评论

      本文标题:任务拆分、分配的前置条件:代码充分解耦(2)

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