1 using System;
2
3 namespace ConsoleApplication2
4 {
5 class Program
6 {
7 static void Main(string[] args)
8 {
9 //先造一部手机
10 SJ sj = new SjLoad();
11 //再给手机贴膜
12 SJ sjm = new SJM(sj);
13 Console.WriteLine(sjm.Getsj());
14 //加了挂饰的手机
15 SJ gs = new GS(sj);
16 Console.WriteLine(gs.Getsj());
17 //贴了膜又加挂饰手机
18 SJ gsm = new GS(sjm);
19 Console.WriteLine(gsm.Getsj());
20
21
22 SJ ren = new Ren();
23
24 SJ sq = new SQ(ren);
25
26 SJ rm = new RM(sq);
27 Console.WriteLine(rm.Getsj());
28 Console.Read();
29 }
30 }
31
32 //建造厂
33 public abstract class SJ
34 {
35 //建造功能
36 public abstract string Getsj();
37 }
38
39 //先造一部手机
40 public class SjLoad:SJ{
41 public override string Getsj()
42 {
43 return "手机";
44 }
45 }
46
47 //给建造厂配备装饰功能
48 public abstract class ZS:SJ
49 {
50 private SJ sj; //准备装手机的容器
51 public ZS(SJ s) //拿一个手机过来
52 {
53 this.sj = s; //把手机装进容器
54 }
55
56 //经过装饰的手机
57 public override string Getsj()
58 {
59 return sj.Getsj();
60 }
61 }
62
63 //给手机贴膜
64 public class SJM : ZS
65 {
66 public SJM(SJ sj) //拿过来一个手机
67 :base(sj)
68 {
69 }
70 //给手机贴膜
71 public override string Getsj()
72 {
73 return "贴了膜的"+base.Getsj();
74 }
75 }
76
77 //加挂饰
78 public class GS : ZS
79 {
80 public GS(SJ sj):base(sj) { }
81 public override string Getsj()
82 {
83 return "+挂饰"+base.Getsj();
84 }
85 }
86
87
88 public class Ren : SJ
89 {
90 public override string Getsj()
91 {
92 return "aaa";
93 }
94 }
95
96
97 public class SQ : ZS
98 {
99 public SQ(SJ s) : base(s) { }
100 private string dsq = "ccc";
101 public override string Getsj()
102 {
103 return dsq+ base.Getsj();
104 }
105 }
106
107
108 public class RM : ZS
109 {
110 public RM(SJ s) : base(s) { }
111
112 private string rmao = "bbb";
113 public override string Getsj()
114 {
115 return rmao+ base.Getsj();
116 }
117 }
118 }