C\#디자인 모드 프로 그래 밍 의 장식 자 모드 분석

4304 단어 C#디자인 모드
장식 자 모델 정의:파생 류 를 통 해 유형 속성 동작 을 증가 하지 않 고 모델 디자인 동 태 를 통 해 이런 효 과 를 얻 을 수 있 으 며 계승 보다 프로그램의 복잡성 을 유연 하 게 감소 할 수 있다.
예 를 들다
왕 봉 이 우승 팀 만 들 기.
먼저 팀 류 는 비어 있 고 왕 봉 의 끊 임 없 는 노력 을 통 해 팀 을 위해 학생 을 얻 고 팀 원 들 에 게 적당 한 플랫폼 을 만들어 발휘 하도록 한다.
팀 이 계속 강해 지고 완전 해 지 는 것 은 장식 자 에 의 해 서로 다른 수요 에 따라 기 류 를 개선 하고 일치 하 게 마지막 에 당신 의 찬성 을 얻어 당신 의 수 요 를 만족 시 키 는 것 입 니 다.
조립 기 모드 를 실현 하 는 도표:
2016217174042765.png (656×437)
전대 구성 코드

 //    
  abstract class WangFengTeam
  {
    //      
    abstract public void Acrion();
  }

  //  
  class Student : WangFengTeam
  {
    // Methods
    override public void Acrion()
    {
      Console.WriteLine("        :");
    }
  }

  //      
  abstract class Direct : WangFengTeam
  {
    //    
    protected WangFengTeam team;

    //     
    public void SetComponent(WangFengTeam team)
    {
      this.team = team;
    }
    //    
    override public void Acrion()
    {
      if (team != null)
      {
        team.Acrion();
      }
    }
  }

  //       ,      。
  class BoyTeam : Direct
  {
    //     
    public string teamName= "   Jquery";

    //    
    override public void Acrion()
    {
      base.Acrion();
      Console.WriteLine("      ,    。");
    }
  }

  //       ,      
  class GrilTeam : Direct
  {
    //    
    override public void Acrion()
    {
      base.Acrion();      

      Console.WriteLine("      ,    。");

      //    
      show();
    }

    public void show()
    {
      Console.WriteLine("   ,  ");
    }
  }
클 라 이언 트 코드:

 public static void Main()
    {
      Student team = new Student();
      BoyTeam boy = new BoyTeam();
      GrilTeam girl = new GrilTeam();

      //      
      boy.SetComponent(team);
      //      
      girl.SetComponent(boy);
      girl.Acrion();
      Console.Read();
    }

장식 자 패턴 의 장단 점
장식 자 모델 에 대한 상세 한 소 개 를 본 후에 우 리 는 그것 의 장단 점 을 계속 분석 했다.
장점:
4.567917.이 모델 을 장식 하고 계승 하 는 목적 은 모두 대상 을 확장 하 는 기능 이지 만 장식 자 모델 은 계승 보다 더욱 유연 하 다4.567917.서로 다른 구체 적 인 장식 류 와 이런 유형의 배열 조합 을 사용 하면 디자이너 는 다양한 행위 의 조합 을 창조 할 수 있다
  • 장식 자 모드 는 확장 성 이 좋 습 니 다
  • 단점:
    장식 자 모델 은 디자인 에 작은 대상 이 많이 나타 나 고 과도 하 게 사용 하면 프로그램 을 더욱 복잡 하 게 만 들 수 있다.그리고 더 많은 대상 은 실수 가 어려워 질 것 이다.특히 이들 대상 은 모두 비슷 해 보인다.
    필드 사용
    다음은 장식 자 모델 이 구체 적 으로 어떤 상황 에서 사용 되 는 지 살 펴 보고 다음 과 같은 상황 에서 장식 자 모델 을 사용 해 야 한다.
    하나의 기능 을 확장 하거나 하나의 클래스 에 추가 책임 을 져 야 합 니 다.
    한 대상 에 게 동적 으로 기능 을 추가 해 야 하 며,이러한 기능 들 은 다시 동적 으로 취소 할 수 있다.
    일부 기본 기능 의 배열 조합 으로 인해 발생 하 는 매우 많은 기능 을 증가 시 켜 야 한다.
    .NET 에서 장식 자 모델 의 실현
    .NET 라 이브 러 리 에서 도 장식 자 모델 의 실현 이 있 습 니 다.이 종 류 는 바로 System.IO.stream 입 니 다.다음은 Stream 류 구 조 를 보 겠 습 니 다.
    2016217174213251.png (562×255)
    BufferedStream,CryptoStream 과 GZipStream 은 사실은 두 가지 구체 적 인 장식 유형 으로 이곳 의 장식 자 모델 은 추상 적 인 장식 캐릭터(Decorator)를 생략 했다.다음은 클 라 이언 트 가 Memory Stream 에 어떻게 동적 으로 기능 을 추가 하 는 지 보 여 줍 니 다.
    
    MemoryStream memoryStream = new MemoryStream(new byte[] {95,96,97,98,99});
          //        
          BufferedStream buffStream = new BufferedStream(memoryStream);
          //        
          CryptoStream cryptoStream = new CryptoStream(memoryStream,new AesManaged().CreateEncryptor(),CryptoStreamMode.Write);
          //       
          GZipStream gzipStream = new GZipStream(memoryStream, CompressionMode.Compress, true);
    
    
    총결산
    여기까지 장식 자 모델 에 대한 소 개 는 끝났다.장식 자 모델 은 상속 이 아 닌 대상 조합 으로 재운 행 시 대상 기능 을 동적 으로 확장 하 는 능력 을 실 현 했 고 필요 에 따라 여러 가지 기능 을 확장 할 수 있어 계승 이 가 져 온'유연성 차이'와'다 자 류 파생 문 제 를 단독으로 사용 하지 않도록 했다.또한 대상 을 대상 으로 하 는 디자인 원칙 에서'상속'과'개방-폐쇄'가 아 닌 대상 조합 을 우선 사용 하 는 것 이 원칙 에 잘 부합된다.

    좋은 웹페이지 즐겨찾기