在查看ContextWrapper源码时,发现以下用法:

这种写法叫装饰者模式,相比于单纯的实现接口,它具备更大的灵活性。

// 抽象类接口,规范饼的属性public interface ICake {  public String name(); // 名称  public Double money(); // 价格}// 原味手抓饼类public class PlainCake implements ICake {    @Override  public String name() {    return "原味手抓饼";  }  @Override  public Double money() {    return 3.5;  }}// 装饰者(Decorator)// 建立和原味饼的连接,得到原始饼属性的同时,又不改动原对象。public abstract class Deractor implements ICake {  ICake iCake;  public Deractor(ICake iCake) {    this.iCake = iCake;  }  @Override  public String name() {    return iCake.name();   }  @Override  public Double money(){    return iCake.money();  }}// 鸡蛋手抓饼public class EggCake extends Deractor {  public EggCake(ICake cake) {    super(cake);  }  @Override  public String name() {    return "鸡蛋" + cake.name(); // 重写父类方法,重新自定义属性  }  @Override  public Double money() {    return 3.5 + 1.5; // 重写父类方法,重新自定义属性  }}// 牛肉味手抓饼public class BeffCake extends Deractor {  public BeffCake(ICake cake) {    super(cake);  }  @Override  public String name() {    return "牛肉" + cake.name(); // 重写父类方法,重新自定义属性,下同  }  @Override  public Double money() {    return cake.money() + 3.0; // 重写父类方法,重新自定义属性,下同  }}测试类public class Test {  public static void main(String[] args) {    //原味,手抓饼类    plaincake plain = new plaincake();    System.out.println(sh.name() + "  价格: " + plain.money());    //鸡蛋,加“鸡蛋” 到手抓饼上    EggCake egg = new EggCake(plain);    System.out.println(egg.name() + "  价格:" + egg.money());    //牛肉,加“牛肉” 到鸡蛋饼上    BeffCake beff = new BeffCake(egg);    System.out.println(beff.name() + "  价格:" + beff.money());  }}输出的结果:原味手抓饼  价格: 3.5鸡蛋原味手抓饼  价格:5.0牛肉鸡蛋原味手抓饼  价格:8.0

可以看到:
手抓饼在原来属性没有被改动的情况下,我们根据Decrator 抽象类,可以随意扩展创建不同口味、价格的饼。

 

 

 

 

更多相关文章

  1. SystemUI下的RecentActivity
  2. Andorid中xml资料汇总
  3. Android中GridView的一些特殊属性
  4. Android(安卓)Vector(Vector/Vector动画)
  5. Android(安卓)ORM-GreenDao学习之一基础篇
  6. Android自定义View
  7. 个人经验 - Android的RelativeLayout布局的layout_height属性设
  8. 彻底理解Android沉浸状态栏适配
  9. Android(安卓)中View只能接收到ACTION_DOWN无法接收ACTION_MOVE

随机推荐

  1. android activity设置全屏以及Android获
  2. Android系统调用
  3. android 布局文件中xmlns:android="http:
  4. Android(安卓)ImageButton android:scale
  5. Android(安卓)TextView 跑马灯效果
  6. 善用Android预定义样式
  7. android ellipsize 属性详解
  8. Android(安卓)资源文件中@、@android:typ
  9. [Android] TroubleShooting: Android(安
  10. 个人仿制android QQ、android大作业