A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 825176857 中级黑马   /  2015-7-12 23:37  /  386 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. // 抽象类 Girl
  2. public abstract class Girl {
  3.     String description = "no particular";

  4.     public String getDescription(){
  5.         return description;
  6.     }
  7. }

  8. // 美国女孩
  9. public class AmericanGirl extends Girl {
  10.     public AmericanGirl() {
  11.         description = "+AmericanGirl";
  12.     }
  13. }

  14. // 国产妹子
  15. public class ChineseGirl extends Girl {
  16.     public ChineseGirl() {
  17.         description = "+ChineseGirl";
  18.     }
  19. }

  20. // 装饰者
  21. public abstract class GirlDecorator extends Girl {
  22.     public abstract String getDescription();
  23. }

  24. // 下面以美国女孩示例
  25. // 给美国女孩加上金发
  26. public class GoldenHair extends GirlDecorator {

  27.     private Girl girl;

  28.     public GoldenHair(Girl g) {
  29.         girl = g;
  30.     }

  31.     @Override
  32.     public String getDescription() {
  33.         return girl.getDescription() + "+with golden hair";
  34.     }

  35. }

  36. // 加上身材高大的特性
  37. public class Tall extends GirlDecorator {

  38.     private Girl girl;

  39.     public Tall(Girl g) {
  40.         girl = g;
  41.     }

  42.     @Override
  43.     public String getDescription() {
  44.         return girl.getDescription() + "+is very tall";
  45.     }

  46. }


  47. // 检验一下
  48. public class Main {

  49.     public static void main(String[] args) {
  50.         Girl g1 = new AmericanGirl();
  51.         System.out.println(g1.getDescription());

  52.         GoldenHair g2 = new GoldenHair(g1);
  53.         System.out.println(g2.getDescription());

  54.         Tall g3 = new Tall(g2);
  55.         System.out.println(g3.getDescription());

  56.         // 你也可以一步到位
  57.         // Girl g = new Tall(new GoldenHair(new AmericanGirl()));
  58.     }
  59. }
复制代码

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马