C\#디자인 모드 프로 그래 밍 에서 메타 모드 의 활용 을 설명 합 니 다.

5330 단어 C#디자인 모드
개술
소프트웨어 개발 에서 우 리 는 때때로 대량의 입자 도 대상 을 만들어 야 한다.예 를 들 어 문서 처리 시스템 은 수천 개의 문자 대상 을 만들어 야 할 수도 있다.그러나 모든 문자 대상 에 게 메모 리 를 분배 하면 시스템 이 실 행 될 때 많은 메모 리 를 소모 할 것 이다.어떻게 대상 을 대상 으로 하 는 조작 방식 의 장점 을 보류 하 는 동시에 대량의 대상 을 만 드 는 것 을 피 합 니까?이제 향 원 모델 이 역할 을 발휘 할 때 다.
2.향원 모드
향 원 모델 은 공유 기술 을 활용 하여 대량의 입자 도 대상 을 효과적으로 지원 한다.예 를 들 어 문서 처리 시스템 에 공유 탱크 를 만 들 고 공유 탱크 에서 알파벳 과 코드 의 대응 관 계 를 구축 하면 공유 탱크 의 26 개 대상 으로 대량의 대상 을 만들어 야 하 는 문 제 를 해결 할 수 있다.그 구조 도 는 다음 과 같다.
201622291612761.jpg (467×289)
Flyweight 는 향 원 인 터 페 이 스 를 정의 하고 외부 대상 은 이 인 터 페 이 스 를 통 해 구체 적 인 향 원 대상 에 접근 합 니 다.
ConcreteFlyweight 는 Flyweight 인 터 페 이 스 를 실현 하여 구체 적 인 향 원 대상 을 정의 하고 향 원 대상 의 내부 상 태 를 저장 합 니 다.이 향원 대상 은 공유 할 수 있다.
Unshared Concrete Flyweight 는 Flyweight 인 터 페 이 스 를 실현 하여 공유 에 사용 되 지 않 는 메타 대상 을 정의 합 니 다.
FlyweightFactory 에서 메타 대상 을 만 들 고 관리 합 니 다.
Client 는 향 원 인터페이스 에 대한 인용 을 저장 하고 이 인용 을 통 해 구체 적 인 향 원 대상 을 효과적으로 사용 합 니 다.
예시
다음은 하나의 실제 응용 으로 하 향 원 모델 을 실현 한다.이 예 는 하나의 텍스트 편집기 에 많은 글자 가 나타 나 고 향 원 모드 를 사용 하여 이 텍스트 편집 기 를 실현 하면 모든 글 자 를 향 원 대상 으로 만 듭 니 다.향 원 대상 의 내부 상 태 는 바로 이 글자 이 고 알파벳 이 텍스트 에 있 는 위치 와 글꼴 스타일 등 다른 정 보 는 외부 상태 입 니 다.다음은 이 예 를 들 어 하 향 원 모델 을 실현 하고 구체 적 인 실현 코드 는 다음 과 같다.

/// <summary>
 ///      
 /// </summary>
 class Client
 {
  static void Main(string[] args)
  {
   //       ,          
   int externalstate = 10;
   //        
   FlyweightFactory factory = new FlyweightFactory();
   //            A,                A
   Flyweight fa = factory.GetFlyweight("A");
   if (fa != null)
   {
    //                   
    fa.Operation(--externalstate);
   }
   //            B
   Flyweight fb = factory.GetFlyweight("B");
   if (fb != null)
   {
    fb.Operation(--externalstate);
   }
   //            C
   Flyweight fc = factory.GetFlyweight("C");
   if (fc != null)
   {
    fc.Operation(--externalstate);
   }
   //            D
   Flyweight fd= factory.GetFlyweight("D");
   if (fd != null)
   {
    fd.Operation(--externalstate);
   }
   else
   {
    Console.WriteLine("          D");
    //                    
    ConcreteFlyweight d = new ConcreteFlyweight("D");
    factory.flyweights.Add("D", d);
   }
   Console.Read();
  }
 }
 /// <summary>
 ///     ,           
 /// </summary>
 public class FlyweightFactory
 {
  //       Dictionary<string,Flyweighy>
  //public Dictionary<string, Flyweight> flyweights = new Dictionary<string, Flyweight>();
  public Hashtable flyweights = new Hashtable();
  public FlyweightFactory()
  {
   flyweights.Add("A", new ConcreteFlyweight("A"));
   flyweights.Add("B", new ConcreteFlyweight("B"));
   flyweights.Add("C", new ConcreteFlyweight("C"));
  }
  public Flyweight GetFlyweight(string key)
  {
//        
   //Flyweight flyweight = flyweights[key] as Flyweight;
   //if (flyweight == null)
   //{
   // Console.WriteLine("          " + key);
   // flyweight = new ConcreteFlyweight(key);
   //}
   //return flyweight;
return flyweights[key] as Flyweight;
  }
 }
 /// <summary>
 ///      ,            
 /// </summary>
 public abstract class Flyweight
 {
  public abstract void Operation(int extrinsicstate);
 }
 //        ,                    ,                     
 public class ConcreteFlyweight : Flyweight
 {
  //     
  private string intrinsicstate ;
  //     
  public ConcreteFlyweight(string innerState)
  {
   this.intrinsicstate = innerState;
  }
  /// <summary>
  ///         
  /// </summary>
  /// <param name="extrinsicstate">    </param>
  public override void Operation(int extrinsicstate)
  {
   Console.WriteLine("     : intrinsicstate {0}, extrinsicstate {1}", intrinsicstate, extrinsicstate);
  }
 }
향 원 모델 의 실현 에서 우 리 는 이전 처럼 입자 의 인 스 턴 스 를 하나의 단독 클래스 로 설계 하지 않 고 공유 대상 의 내부 상 태 를 공유 류 의 내부 정의 에 두 었 다.
4.향 원 모델 의 장단 점
향 원 모델 의 실현 을 분석 한 후에 우 리 는 향 원 모델 의 장단 점 을 계속 분석 합 시다.
장점:
시스템 의 대상 수 를 낮 추어 시스템 의 입자 도 대상 이 메모리 에 가 져 오 는 압력 을 낮 추 었 다.
단점:
1.대상 이 공유 할 수 있 도록 일부 상 태 를 외부 화 시 켜 프로그램의 논 리 를 더욱 복잡 하 게 하고 시스템 을 복잡 하 게 해 야 한다.
2.향 원 모드 는 향 원 대상 의 상 태 를 외부 화하 고 외부 상 태 를 읽 으 면 운행 시간 이 약간 길 어 집 니 다.
5.장면 사용
아래 의 모든 조건 이 만족 할 때 향 원 모드 를 사용 하 는 것 을 고려 할 수 있다.
  • 한 시스템 에 대량의 대상 이 있다
  • 이 대상 들 은 대량의 메모 리 를 소모 한다
  • 4.567917.이런 대상 중의 상 태 는 대부분 외부 화 될 수 있다4.567917.이런 대상 들 은 내부 상태 에 따라 여러 그룹 으로 나 눌 수 있 고 외부 대상 을 대상 에서 제거 할 때 모든 그룹 은 하나의 대상 으로 만 대체 할 수 있다소프트웨어 시스템 은 이러한 대상 의 신분 에 의존 하지 않 는 다위의 조건 을 만족 시 키 는 시스템 은 향 원 모드 를 사용 할 수 있다.그러나 향원 모드 를 사용 하려 면 서브 시스템 에 있 는 모든 향원 의 표를 추가 로 유지 해 야 한다.이것 도 자원 을 소모 해 야 하기 때문에 충분 한 향원 실례 를 공유 할 수 있 을 때 향원 모드 를 사용 해 야 한다.

    좋은 웹페이지 즐겨찾기