瞎扯
由于最近都在写react.
写android其实也没定个计划.(我觉得这样比较有挑战)
基本每天写的时候才想主题.
就按顺序,先把我理解的设计模式都写一遍吧.哈哈.
装饰模式
我还记得我学java基础的时候,老师讲过这个模式.
当时完全听不进去.不知道讲的什么
我写文章的时候也在想,我写给自己看,还是写给别人看,
太小白的是不是完全不知道在说什么.
不过也没办法.我觉得这个只能慢慢来,经历和思想境界到了就通了.
装饰模式,顾名思义
在原有的基础上添加新的内容.变成一个新的类似的东西.
这个模式很常用.
因为能在不改变原有逻辑的情况下,添加额外的功能.
比如定义一个类
public class Test {
public void test() {
Man man = new Man();
CodeFarmer manDoctor = new CodeFarmer(man);//男码农
Woman woman = new Woman();
CodeFarmer womanDoctor = new CodeFarmer(woman);//女码农
}
/**
* 人
*/
public interface Person {
String sex();
int age();
}
/**
* 女人
*/
public class Woman implements Person {
@Override
public String sex() {
return "女";
}
@Override
public int age() {
return 0;
}
}
/**
* 男人
*/
public class Man implements Person {
@Override
public String sex() {
return "男";
}
@Override
public int age() {
return 0;
}
}
/**
* 码农
*/
public class CodeFarmer implements Person {
private Person person;
public CodeFarmer(Person person) {
this.person = person;
}
@Override
public String sex() {
return person.sex();
}
@Override
public int age() {
return person.age();
}
public String toString() {
return "我是" + person.sex() + "码农";
}
}
}
人=>男人|女人
码农=>人+因为会敲代码,所以叫码农
码农=>(男人|女人)+会敲代码
码农也是人.
所以也是实现Person 接口.
装饰模式大致就是这个样子.
装饰类与被装饰的对象,都继承同一个接口.保证装饰后还是同一个的类型.
装饰可以有几次,可以多次装饰吗?
当然可以,
/**
* 高级码农
*/
public class SeniorCodeFarmer implements Person {
private Person person;
public SeniorCodeFarmer(Person person) {
this.person = person;
}
@Override
public String sex() {
return person.sex();
}
@Override
public int age() {
return person.age();
}
public String toString() {
return "我是" + person.sex() + "高级码农";
}
}
public void test() {
Man man = new Man();
CodeFarmer manCodeFarmer = new CodeFarmer(man);//男码农
Woman woman = new Woman();
CodeFarmer womanCodeFarmer= new CodeFarmer(woman);//女码农
SeniorCodeFarmer manSenior = new SeniorCodeFarmer(womanCodeFarmer);//男高级
SeniorCodeFarmer manSenior1 = new SeniorCodeFarmer(man);//女高级
SeniorCodeFarmer woManSenior= new SeniorCodeFarmer(womanCodeFarmer);//女高级
SeniorCodeFarmer woManSenior1 = new SeniorCodeFarmer(woManSenior);//女高级
}
可以直接变成高级码农.也可以变成码农再变成高级码农.
但本质上.装饰的都是同一个人.
也就是不管装饰了多少次.
其根源,还是第一次的那个人
从面向对象角度讲:
装饰模式讲究的是扩展,而不是修改.不会轻易去象改变装饰对原有的属性.
设计模式从现实的角度去理解.就比较容易学.
交流群:493180098,这是个很少吹水,交流学习的群.
APP开发维护咨询群 : 492685472 ,承接APP迭代.开发维护.咨询业务,付费快速解决问题.
网友评论