面试常常遇到各种设计模式,而且网上也是有很多java设计模式栗子,但是设计模式实际应用呢?网上很多都没讲清楚,这里就进行一个总结。
什么是垃圾代码?
垃圾代码表征:业务代码与技术代码耦合; 主业务和增值业务代码职责耦合;多余的依赖关系;
1.业务代码与技术代码耦合(出现问题:如果多处使用,以后更换xutils框架或者升级,就要大量修改,查找该代码)
import org.xutils.common.Callback;
import org.xutils.http.RequestParams;
import org.xutils.x;
public class LogoActivity extends Activity {
@BindView(R.id.init_setting_tv)
TextView mInitSettingTv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_logo);
mInitSettingTv.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
RequestParams params = new RequestParams(url);
params.setSaveFilePath(dataPath);
params.setAutoRename(true);
x.http().get(params, new Callback.ProgressCallback<File>() {
@Override
public void onSuccess(File result) {
Toast.makeText(LogoActivity.this,"成功",Toast.LENGTH_LONG).show();
}
@Override
public void onError(Throwable ex, boolean isOnCallback) {}
@Override
public void onCancelled(CancelledException cex) {}
@Override
public void onFinished() {}
@Override
public void onWaiting() {}
@Override
public void onStarted() {}
@Override
public void onLoading(long total, long current, boolean isDownloading) {
System.out.println("下载开始" + current + "大小:" + total);
}
});
}
});
}
}
}
门面设计
定义:要求一个子系统的外部与其内部的通信必须通过一个统一的对象进行,门面模式提供了一个高层次的接口,使得子系统更易于使用;
目的:1.门面对象是通往外界子系统内部的唯一通道;2.通过门面对象降低程序耦合;
举例子:商品的购买栗子
人直接去工厂就会有各种路线记录,就会很复杂。而通过商店这个就能直接实现购买所有东西,商店就是唯一通道,使人这个主要业务逻辑不再复杂。如果说去掉商店不是更简单,那么人与各个工厂都有联系就会显得乱。
类似的代理模式
定义:给目标对象提供一个代理对象,并由代理对象控制对目标对象的引用;
目的:1通过引入代理对象的方式来间接访问目标对象,防止直接访问目标对象给系统带来的不必要的复杂型;2通过代理对象对原有的业务增强。
人-》代购人-》工厂
方法实现
实现效果:
快速切换第三方sdk框架,由于sdk如果有问题,更换其他类似功能sdk,这种模式就非常高效。
代理流程图示:
设计模式有什么用?
帮助我们将应用组织成容易了解,容易维护,具有弹性的结构,建立可维护的系统,要诀在于随时想到系统以后可能需要的变化以及应对变化的原则。
场景:
代码demo效果:https://github.com/lshAndroid/FrameworkSdkDesign