6月更文挑战|设计模式 —— Builder模式
这是我参与更文应战的第3天,活动概况检查:更文应战
Builder办法
Builder办法通常是作为装备类结构器将装备构建和表明差异开来,一起又将装备从政策类中阻隔,省去过多setter办法。常见Builder办法经过链式调android开发用,能够让代码更加简介、清楚。
结构函数
平常咱们创立一个类的时分是经过编写结构办法来完毕。当咱们需求Android初始化多少个装备时就调用对应的重载函数。这个进程很简略在开发进程中犯错,不方便开发者直观了解到所带入参装备项详细是什么意义。
class Computer{
private CP开源节流U cpu;
private KeyBoard keyboard;
private Display display;
private Power power;
private Raw raw;
public Computer(CPU cpu){
this.cpu = cpu;
}缓存
pu缓存视频兼并blic Computer(CPU cpu,KeyBoard keyboard){
this.cpu = cpu;
this.keyboard = keyboard;
}
....
public Computer(CPU cpu,KeyBoard k开源代码网站githubeyboard,Display display,Power power,Raw raw){
this.cpu = cpu;
this.keyboAndroidard = keyboard;
this.p开源阅览ower = power;
this.raw = raw;
}
}
setter办法
下面再换个办法,构建函数是空完毕,将装备项都以setter办法做初始化完毕。经过setteandroid手机r确实处理了结构函数多个装备入参简略形成装备项搞混参数过错的情况,在代码阅览上有了进步。咋一看setter办法好像能够满足开发要求,但这也存在坏处装备项不稳定。政策情况简略发生变化,在开发进程中随时能够调用setter改动装备项。
c缓存视频变成本地视频lass Computer{
private CPU cpu;
private KeyBoard keyboard;缓存
private Display display;
private Power power;
private Raw缓存视频变成本地视频 raw;
public Computer(){}
public void setCPU(CPU cpu){
this.cpu = cpu;
}
public void Display(Display display){
this.display = display;
}
....
public void setRaw(Raw raw){
this.raw = raw;
}
}
builder
为了处理以上问题,选用Buildeandroid下载安装r办法是最佳选择缓存文件在哪里。
Computer类傍边完毕静态类Builder,Builder具有和Com开源基金会puter相同的装备项。Computer结构函数是私有的缓存的视频怎样保存到本地,不能直接创立Computer政策,只能经过Builder去创立Computer。一起Builder是链式调用,设置装备项完毕今后以build()办法完毕装配出终究需求实例化的Computer政策。由此就保证装备办法清楚、维护装备项不被篡改。
class Computer{
private CPU cpu;
priva开源是什么意思te KeyBoard keyboard;
prandroid平板电脑价格ivate Display display;
private Power power;
private Raw raw;
private Computer(Builder builder){
t缓存视频怎样转入相册his.cpu = buil开源是什么意思der.cpu;
this.keybandroid体系oa开源rd = builder.keyboard;
this.display = builder.display;
this.power = builder.power开源基金会;
this.raw = builder.raw;
}
public static class Builder缓存文件在哪里{
private CPU cpu;
private KeyBoard keyboard;
private Display display;
private Power power;
private Raw raw;开源代码网站github
public Builder(CPU cpu){
t实例化数组his.cpu=cpu;
}
p实例化需求ub开源操作体系lic Builder setKeyBoard(K实例化servlet类反常eyBoard keyBoard) {
this.keandroid是什么手机牌子yBoard = keyBoard;
return this缓存视频怎样转入本地视频;
}
public Builder setD开源阅览isplay(Display display) {
this.display = display;
return this;
}
public Builder setDisplay(Display disandroid开发p开源阅览lay) {
t实例化需求his.display = display;
return this;
}
public Builder setPower(Power Power) {
this.power = power;
return this;
}
public Builder setRaw(Raw raw) {
this.raw开源节流是什么意思是什么 = raw;
return th缓存整理is;
}
public Computer build(){
reandroid手机turn new Computer(this);
}
}
}
new Computer.Builder(xxxx)
.setDisplay(xxx)
.setKeyboar开源矿工d(xxx)
.build();
拓展
插件
知道Builder办法之后在日常开发进程中怎样快速编写Builder办法,一个类装备项一多手写就不是很好开源是什么意思的处理办法。
Idea提供了Builder Generator插件主动生成静态类Builder。先编写一个需求Builder的东西类,然后alt+insert履行Builder即可主动生成Builder代码。
使用
Builder办法在实践开发中用途广阔。
像是Android图片开源库Gilde选用的就是Builde缓存r办法。
Glidandroid下载安装e.with(this)
.load(url)
.placeholder(R.drawable.loading)
.error(R.drawab缓存整理le缓存视频变成本地视频.error)
.diskCacheandroid手机Strategy(DiskCacheStrategy.NONE)
.in缓存文件在哪里to(imageView);
Glider缓存的视频怎样保存到本地的Builder办法调用流程描绘十分清楚:
- 先初始化Glide上下文
- 预设加载图片地址
- 装备加载进程中的占位图
- 装备加载失利的占位图实例化servlet类反常
- 装备缓存战略
- 装载图片闪现的实例化数组视图政策
关于客户端并不关怀内部缓存整理详细完缓存视频兼并结,只需求传递需求的装备参数就能完毕图片加载。
总结
Builder办法具备杰出的封装,只对外暴露需求的装备项不必知道内部细节,一起也相对独立后续简略扩展。不足之处就是增加了一份Builder实例,消耗内存。