装饰模式指的是在没必要改变原类文件和使用继承的状况下,动态地扩展一个对象的功能。它是经过建立一个包装对象,也就是装饰来包裹真实的对象。编程
模型:微信
举个例子:好比一个正在上高中的学生“小明”在考完试后,和父母说想买一款5000元的手机。架构
1.Component,抽象方法-买手机ide
public abstract class AbstractBuyPhone { //主要是向父母提出想买手机的意向 public abstract void BuyPhone(); //父母是否赞成 public abstract void Agree(); }
2.ConcreteComponent:具体的意向this
public class XiaoMingBuyPhone extends AbstractBuyPhone { @Override public void BuyPhone() { Log.d("qzs","我想买一款华为的5000元的手机"); } @Override public void Agree() { Log.d("qzs","父母赞成了"); } }
3.Decorator,增长一个装饰抽象类,方便修饰spa
public class AbstractDecorator extends AbstractBuyPhone { private AbstractBuyPhone abstractBuyPhone; public AbstractDecorator ( AbstractBuyPhone abstractBuyPhone){ this.abstractBuyPhone=abstractBuyPhone; } @Override public void BuyPhone() { this.abstractBuyPhone.BuyPhone(); } @Override public void Agree() { this.abstractBuyPhone.Agree(); } }
4.ConcreteDecorator:若是直接去找父母要手机,很容易被拒绝,因此须要修饰一下,这里用成绩修饰一下设计
public class ScoreDecortator extends AbstractDecorator { public ScoreDecortator(AbstractBuyPhone abstractBuyPhone) { super(abstractBuyPhone); } //先和父母说说本身的成绩 private void ShowScore(){ Log.d("qzs","我此次考试的成绩年级前三,又进步了"); } //重写买手机的方法,先汇报成绩,而后再提买手机的事情 @Override public void BuyPhone() { this.ShowScore(); super.BuyPhone(); } }
5.调用,也就是请求父母:code
AbstractBuyPhone str; //小明的本来意向 str=new XiaoMingBuyPhone(); //修饰后的意向 str=new ScoreDecortator(str); //向父母提出想法(成绩和买手机) str.BuyPhone(); //父母赞成了 str.Agree();
运行结果:对象
强调:这里只加了分数的修饰,能够加多个修饰类来知足你最后的目的继承
1.优势
2.缺点
3.适用场景
定义和优缺点来自网上百度信息
另外能够加入个人Android技术交流群:458739310
你们能够关注个人微信公众号:「安卓干货铺」一个有质量、有态度的公众号!