[필기] 디자인 모델 - 장식 자 모델

17811 단어 장식 자 모드
QQavator 기능 과 유사 한 코드 구현
1. 원시 실현
 1  // 2     //1、wear*        ,    ;          ,      ,           ,         Wear*,      ;

 3     //2、           ,    Person   ,     ——    ;

 4     //3、               ,              ,        ;

 5     class Person

 6     {

 7         private string name;

 8         private List<string> clothing=new List<string>();

 9         public Person(string name)

10         {

11             this.name = name;

12             clothing.Add("      ");

13         }

14         public void WearJeans()

15         {

16             clothing.Add("    ——     ");

17         }

18         public void WearRedTshirt()

19         {

20             clothing.Add("    ——  T ");

21         }

22         public void WearShoes()

23         {

24             clothing.Add("    ——    ");

25         }

26         public void Show()

27         {

28 

29             Console.WriteLine("   ,     {0},        ,         ?", name);

30             foreach (var item in clothing)

31             {

32                 Console.WriteLine("{0}", item);

33             }

34         }

35 

36         public static void Main(string[] args)

37         {

38             Person person = new Person("   ");

39             person.WearRedTshirt();

40             person.WearJeans();

41             person.WearShoes();

42             person.Show();

43         }

개선 코드
  
 1  // 2     //1、  1  ,        ;

 3     //2、  2  ,      ,   ;

 4     //3、  3  ,             Wear  ,             ;

 5     //4、      :  、      、      (41   )            、

 6     //5、Console.WriteLine         ,       ?

 7     //6、      、       ,           ?

 8     class Person

 9     {

10         protected string name;

11         public Person()

12         {

13         }

14         public Person(string name)

15         {

16             this.name = name;

17         }

18         public virtual void Wear()

19         {

20             Console.WriteLine("   ,     {0},        ,         ?", name);

21         }

22        

23     }

24    

25     class ComponetA : Person

26     {

27         protected Person com = null;

28          public void  SetComponetA(Person com)

29         {

30             if (com!=null)

31             {

32                 this.com = com;

33             }

34         }

35         public override void Wear()

36         {

37             if (com!=null)

38             {

39                 com.Wear();

40             }

41         }

42         

43     }

44     class Jeans : ComponetA

45     {

46         public override void Wear()

47         {

48             base.Wear();

49            Console.WriteLine("    ——     ");

50         }

51     }

52     class Shoes : ComponetA

53     {

54         public override void Wear()

55         {

56             base.Wear();

57             Console.WriteLine("    ——    ");

58         }

59     }

60     class RedTshirt : ComponetA

61     {

62         public override void Wear()

63         {

64             base.Wear();

65             Console.WriteLine("    ——  T ");

66         }

67         

68     }

69     class  programmer

70     {

71         public static void Main(string[] args)

72         {

73             Person person = new Person("   ");

74             Jeans jeans = new Jeans();

75             Shoes shoes = new Shoes();

76             RedTshirt redTshirt = new RedTshirt();

77             jeans.SetComponetA(person);

78             shoes.SetComponetA(jeans);

79             redTshirt.SetComponetA(shoes);

80             redTshirt.Wear();

81         }

82     }

3. 총화
1. 디자인 모델 은 어떤 문 제 를 해결 합 니까?답: 장식 모델 은 '유형 중의 장식 기능 을 유형 에서 옮 겨 제거 하면 원래 의 유형 을 간소화 할 수 있다', '유형의 핵심 직책 과 장식 기능 을 효과적으로 구분 할 수 있다. 또한 관련 장식 논 리 를 제거 할 수 있다'.
2, 어떤 수단 으로 효과?답: 장식 모델 은 장식 하고 자 하 는 기능 을 하나의 유형 에 두 고 확장 하기 쉬 운 효 과 를 얻는다.실행 시 다 중 하위 클래스 에서 같은 장식 논 리 를 기본 클래스 에서 통일 적 으로 추출 하여 중복 코드 를 피 합 니 다.
3. 응용 장면 과 제약 조건?답: 기 존 기능 의 동태 에 더 많은 기능 을 추가 해 야 할 때;제약 조건: 장식 류 는 서로 독립 한다.장식 순 서 는 매우 중요 하 다.
4. 대상 을 대상 으로 하 는 몇 가지 원칙 에 부합 합 니까?답: 리 씨 교체, 개방 - 폐쇄, 단일 직책;
5. 디자인 모델 을 사용 하지 않 는 코드 의 단점 은 어디 에 있 습 니까?답: 코드 참조
6. 수 요 를 바 꾸 고 디자인 모델 을 사용 하 는 코드 에 대한 건장 성, 유지 가능성, 확장 성 검 사 를 한다.

좋은 웹페이지 즐겨찾기