实现效果:

  1. 了一个鸳鸯锅
  2. 加了份毛肚
  3. 加了份龙虾
  4. 加了份千张
  5. 顾客:陆小凤 总共花费:404.0
  6. 了一个红油锅
  7. 加了份龙虾
  8. 加了份龙虾
  9. 加了份龙虾
  10. 顾客:威帅 总共花费:1115.0

作用:

就是通过一个又一个的类修饰,最终完成一个完整的功能
特点就是子类都是调用父类的变量来实现

完整代码:

  1. package decorateMode;
  2. class Client{
  3. String Client_name;
  4. String Client_Tel;
  5. void setInfomation(String name, String Tel){
  6. Client_name = name;
  7. Client_Tel = Tel;
  8. }
  9. void cloneInfomation(Client client) {
  10. Client_name = client.Client_name;
  11. Client_Tel = client.Client_Tel;
  12. }
  13. String getName() {
  14. return Client_name;
  15. }
  16. }
  17. // 锅底抽象类
  18. abstract class PanButtom extends Client{
  19. String description = "Unknow PanButtom";
  20. public String getDescription() {
  21. return description;
  22. }
  23. public abstract double cost();
  24. }
  25. // 配菜
  26. abstract class SideDish extends PanButtom{
  27. public abstract String getDesciption();
  28. }
  29. // =========================== 锅底 ====================
  30. // 鸳鸯锅
  31. class TwoFlavorPan extends PanButtom{
  32. public TwoFlavorPan(String ClentName, String ClientTel) {
  33. System.out.println("定 了一个鸳鸯锅");
  34. description = "鸳鸯锅";
  35. setInfomation(ClentName, ClientTel);
  36. }
  37. @Override
  38. public double cost() {
  39. // TODO Auto-generated method stub
  40. return 30;
  41. }
  42. }
  43. class RedOil extends PanButtom{
  44. public RedOil(String ClentName, String ClientTel) {
  45. System.out.println("定 了一个红油锅");
  46. description = "红油锅";
  47. setInfomation(ClentName, ClientTel);
  48. }
  49. @Override
  50. public double cost() {
  51. // TODO Auto-generated method stub
  52. return 50;
  53. }
  54. }
  55. //=========================== 配菜 ====================
  56. // 都是通过父类的基础上进行操作
  57. // 毛肚
  58. class Maodu extends SideDish{
  59. PanButtom PanButtom;
  60. String name = "毛肚";
  61. double pic = 15.5;
  62. public Maodu(PanButtom pan) {
  63. // TODO Auto-generated constructor stub
  64. System.out.println("加了份" + name);
  65. PanButtom = pan;
  66. cloneInfomation(pan);
  67. }
  68. @Override
  69. public String getDesciption() {
  70. return PanButtom.getDescription() + ", " + name;
  71. }
  72. @Override
  73. public double cost() {
  74. return PanButtom.cost() + pic;
  75. }
  76. }
  77. // 千张
  78. class QianZhang extends SideDish{
  79. PanButtom PanButtom;
  80. String name = "千张";
  81. double pic = 3.5;
  82. public QianZhang(PanButtom pan) {
  83. // TODO Auto-generated constructor stub
  84. System.out.println("加了份" + name);
  85. PanButtom = pan;
  86. cloneInfomation(pan);
  87. }
  88. @Override
  89. public String getDesciption() {
  90. return PanButtom.getDescription() + ", " + name;
  91. }
  92. @Override
  93. public double cost() {
  94. return PanButtom.cost() + pic;
  95. }
  96. }
  97. //龙虾
  98. class LongXia extends SideDish{
  99. PanButtom PanButtom;
  100. String name = "龙虾";
  101. double pic = 355;
  102. public LongXia(PanButtom pan) {
  103. // TODO Auto-generated constructor stub
  104. System.out.println("加了份" + name);
  105. PanButtom = pan;
  106. cloneInfomation(pan);
  107. }
  108. @Override
  109. public String getDesciption() {
  110. return PanButtom.getDescription() + ", " + name;
  111. }
  112. @Override
  113. public double cost() {
  114. return PanButtom.cost() + pic;
  115. }
  116. }
  117. public class main {
  118. static public void main(String[] args) {
  119. // 创造一个类型
  120. PanButtom Cline1 = new TwoFlavorPan("陆小凤", "8848");
  121. Cline1 = new Maodu(Cline1); // 添加一个毛肚修饰
  122. Cline1 = new LongXia(Cline1); // 添加一个龙虾修饰
  123. Cline1 = new QianZhang(Cline1); // 添加一个千张修饰
  124. System.out.println("顾客:" + Cline1.getName() + " 总共花费:" + Cline1.cost() + "元");
  125. PanButtom Cline2 = new RedOil("威帅", "8848");
  126. Cline2 = new LongXia(Cline2);
  127. Cline2 = new LongXia(Cline2);
  128. Cline2 = new LongXia(Cline2);
  129. System.out.println("顾客:" + Cline2.getName() + " 总共花费:" + Cline2.cost() + "元");
  130. // 后面可以加上第一章节的策略模式进行计算
  131. }
  132. }