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