最近有个需求,需要从顶层架构上封装多台厂家的打印机(称),实现更改xml配置就可切换不同的打印机,不需要更改代码!
以下代码体现了优秀的架构封装能力,多态的精彩演绎!
1面向接口编程:先定义接口,有哪些具体功能
public interface WeighInterface {
// 获取重量等状态
void getWeigh(Context context,LvTaiScalePresenterCallback callback);
// 去皮
void tare();
// 置零
void zero();
interface LvTaiScalePresenterCallback {
// 净重net,皮重pnet,状态statu(3表示稳定)
void getData(int net, int pnet, int statu);
//欠载的时候返回true,只执行一次
void isScaleCanUse(boolean isCan);
}
}
2不同的具体某个厂家的称都实现顶层接口
厂家1
public class LvTaiWeigh implements WeighInterface {
private ScalePresenter scalePresenter;
@Override
public void getWeigh(final Context context, final WeighInterface.LvTaiScalePresenterCallback callback) {
scalePresenter = new ScalePresenter(context, new ScalePresenter.ScalePresenterCallback() {
@Override
public void getData(final int net, final int pnet, final int statu) {
callback.getData(net, pnet, statu);
}
@Override
public void isScaleCanUse(boolean isCan) {
callback.isScaleCanUse(isCan);
}
});
}
@Override
public void tare() {
scalePresenter.tare();
}
@Override
public void zero() {
scalePresenter.zero();
}
}
厂家2
public class LvTai1Weigh implements WeighInterface {
@Override
public void getWeigh(final Context context, final LvTaiScalePresenterCallback callback) {
}
@Override
public void tare() {
}
@Override
public void zero() {
}
}
3构建工厂模式,通过工厂提供不同厂家的打印机
public class WeighFactory {
public static WeighInterface getWeighName(String name){
if(name.equals("lvtaiweigh")){
return new LvTaiWeigh();
}else {
return new LvTai1Weigh();
}
}
}
以上内容可以打包成aar,供开发者调用
4根据不同型号打印机调用具体厂家的打印机
WeighInterface mWeighInterface;
mWeighInterface = WeighFactory.getWeighName("lvtaiweigh");
mWeighInterface.getWeigh(this, new WeighInterface.LvTaiScalePresenterCallback() {
@Override
public void getData(final int net, final int pnet, final int statu) {
Log.e("wy","27testaar净重:"+net+"皮重:"+pnet+"状态:"+statu);
}
@Override
public void isScaleCanUse(final boolean isCan) {
}
});