디자인 모드 는 C\#의 실현 과 확장 을 바탕 으로 합 니 다.생 성 모드(1)

3452 단어 디자인 모드c#
생 성 모드
생 성 모드 를 사용 하 는 주요 동 기 는'변화'에서 비롯 됩 니 다.어떤 구성 이 빠르게 변화 할 까요?꼭 그렇지 는 않다.대부분의 프로젝트 는 상대 적 으로 안정 적 인 핵심 이 있 을 것 이다.프레임 워 크 라 고 불 리 는 것 이 든 더 유행 하고 더 밑바닥 에 있 는 Foundation 이 든 이 부분 은 상대 적 으로 안정 적 이 고 다른 부분 은'상대 적'변화 가 빈번 하 다 는 뜻 이다.생 성 모드 는 실례 화 과정 을 추상 화 했다.그들 은 시스템 을 어떻게 만 들 고 조합 하 며 대상 을 표시 하 는 지 에 독립 시 켰 다.하나의 클래스 생 성 모드 는 계승 을 사용 하여 실례 화 된 클래스 를 바 꾸 고,하나의 대상 생 성 모드 는 실례 화 를 다른 대상 에 게 위탁 합 니 다.시스템 이 진화 함 에 따라 클래스 계승 이 아 닌 대상 복합 에 점점 의존 하고 창설 모델 이 더욱 중요 해진 다.
1.예비역-단순 공장
가장 간단 한 공장 류
예비역 으로서 먼저 소박 한 방법 으로 공장 을 실현 하 다.
public interface IProduct
{
	string Name { get; }        
}

public class ConcreteProductA : IProduct
{
	public string Name { get { return "Product A"; } }
}

public class SimpleFactory
{
	public IProduct Create()
    {
    	return new ConcreteProductA();
    }
}

Unit Test:
[TestMethod]
public void Test_SimpleFactory()
{
    SimpleFactory factory = new SimpleFactory();
    IProduct product = factory.Create();

    Assert.IsNotNull(product);
    Assert.IsInstanceOfType(product, typeof(ConcreteProductA));
}

장점:
  • IProduct 를 통 해 클 라 이언 트 와 구체 적 인 ContreteProductX 의 의존 관 계 를 격 리 하고 클 라 이언 트 프로그램의 시야 에 ContreteProductX 가 전혀 없다
  • ContreteProductX 가 방법 이나 속성 을 증가,삭제 하 더 라 도 전체적인 국면 에 지장 이 없다.요구 에 따라 IProduct 를 실현 하면 된다.Client 는 ContreteProductX 의 변화 에 관심 을 가 질 필요 가 없다

  • 단점:
    4.567917.Contrete ProductX 를 직접 쓰 는 것 에 비해 공장 하 나 를 더 써 야 한다
    효율 문제.Factory 인 스 턴 스 를 구축 하고 추상 적 인 유형의 인 스 턴 스 를 가 져 온 후에 사용 하지 않 으 면 자원 에 낭비 가 있 습 니 다.특히 이 과정 이 매우 빈번 할 때
    개선:
    4.567917.공장 인 스 턴 스 를 매개 변수 로 작업 에 주입 하 는 것 은 모든 방법 내부 에서 자체 적 으로 만 드 는 것 이 아니다
    4.567917.공장 을 단일 한 방식 으로 설계 했다.공장 의 지적 이 상대 적 으로 단일 하기 때문에 모든 클 라 이언 트 가 필요 로 하 는 공장 은 유일한 공유 사례 를 사용한다
    4.567917.정적 클래스 를 사용 합 니 다.이것 도 자원 의 사용 을 효과적으로 절약 하 는 방법 이 라 고 할 수 있 습 니 다.그러나 정적 류 는 계승 되 지 않 고 Object 에서 만 계승 할 수 있 으 며 다른 가능성 이 없습니다.이 는 대상 을 대상 으로 하 는 디자인 원칙 을 위반 하 는 동시에 테스트 의 데이터 격 리 작업 에 도 큰 장 애 를 가 져 올 수 있다
    넓히다
    파라미터 화학 공장
    공장 이 운영 할 때 추상 적 인 유형의 요구 에 부 합 된 인 스 턴 스 를 효과적으로 선택 하려 면 가장 간단 한 메커니즘 은 하나의 매개 변 수 를 전달 하 는 것 입 니 다.이것 은 하나의 문자열 일 수 있 습 니 다.예 를 들 어 공장 류 의 실현 에 나타 난 Cat egory 형식의 매개 변 수 를 전달 하 는 것 입 니 다.
    public interface IProduct
    {
        string Name { get; }        
    }
    
    public class ConcreteProductA : IProduct
    {
        public string Name { get { return "Product A"; } }
    }
    
    public class ConcreteProductB : IProduct
    {
        public string Name { get { return "Product B"; } }
    }
    
    public class ParametricFactory
    {
        public enum Category
        {
            A, 
            B
        }
    
        public IProduct Create(Category category)
        {
            switch(category)
            {
                case Category.A:
                    return new ConcreteProductA();
                case Category.B:
                    return new ConcreteProductB();
                default:
                    throw new NotSupportedException();
            }
        }
    }
    

    Unit Test:
    [TestMethod]
    public void Test_ParametricFactory()
    {
        ParametricFactory factory = new ParametricFactory();
        IProduct product = factory.Create(ParametricFactory.Category.A);
        Assert.IsNotNull(product);
        Assert.IsInstanceOfType(product, typeof(ConcreteProductA));
    
        product = factory.Create(ParametricFactory.Category.B);
        Assert.IsNotNull(product);
        Assert.IsInstanceOfType(product, typeof(ConcreteProductB));
    }
    

    좋은 웹페이지 즐겨찾기