在代码中找设计原则

2017-07-25  本文已影响20人  王小贱_ww

1

写代码中不要去想什么SOLID原则 ,正确的做法是在写代码的过程中总结出原则(多写代码)
对于TripManager类,我们只需要让它开始和结束两个动作,不要让这个类过于复杂,过于耦合,不利于扩展,根据力度来分配。结束后,我们还需要上传数据,这个方法就不要放在TripManager中来写了。

2

职责细分,该是谁的就是谁的,单一职责

public class TripTransfer {
//结束时上传和广播有网络的时候上传
    public void uploadData() {
        
    }
}

3

TripTracker典型的外观类,它不用管需要用什么坐标系、数据来源,因为这些都是在子系统中实现的,它只负责实例化和产生结果。

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() {
        

    }
    .....有省略...........

在startLocation()里,我们需要知道是用百度地图还是高德地图,如果我们在GpsTracker 类中声明了使用百度地图,当需求改变是,我们又要改变这个类,让发生变化交给别人去做,自己这个类尽量不发生变化。在这里我们采用工厂方法。

抽象方法
public abstract class LocationTracker {
    private boolean mUserGps;
    private boolean mUseNetwork;

    public LocationTracker(boolean mUserGps, boolean mUseNetwork) {
        this.mUserGps = mUserGps;
        this.mUseNetwork = mUseNetwork;
    }

    public abstract void startLocation();

    public abstract void stopLocation();

    public interface LocationChangedListener {

        void onLocationChanged(GpsTracker.GpsEntity entity);
    }
}
继承去实现两个方法
public class DefaultLocationTracker extends LocationTracker {

    public DefaultLocationTracker(boolean mUserGps, boolean mUseNetwork) {
        super(mUserGps, mUseNetwork);
    }

    @Override
    public void startLocation() {

    }

    @Override
    public void stopLocation() {

    }
}
 public void startLocation() {
        mTracker = LocationTrackerFactory.newTracker(type);
        mTracker.startLocation();
在factory中去配置
    }

public class LocationTrackerFactory {
    public static LocationTracker newTracker(int type) {
        return null;
    }
}

以上代码中,最能体现出单一原则,一个类负责一件事情
开放封闭原则 里氏替换原则 接口分离原则 依赖倒置原则这四个,别急,慢慢来!!!

上一篇下一篇

猜你喜欢

热点阅读