1. 程式人生 > >裝飾者模式的魅力

裝飾者模式的魅力

app lin err space system override using public sin

  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 ""; 93 } 94 } 95 96 //給人配一把手槍 97 public class SQ : ZS 98 { 99 public SQ(SJ s) : base(s) { } //把人抓過來 100 private string dsq = "拿著手槍的"; 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 = "英俊的"; 113 public override string Getsj() 114 { 115 return rmao+ base.Getsj(); 116 } 117 } 118 }

裝飾者模式的魅力