디자인 모드 는 C\#의 실현 과 확장 을 바탕 으로 합 니 다.생 성 모드(1)
생 성 모드 를 사용 하 는 주요 동 기 는'변화'에서 비롯 됩 니 다.어떤 구성 이 빠르게 변화 할 까요?꼭 그렇지 는 않다.대부분의 프로젝트 는 상대 적 으로 안정 적 인 핵심 이 있 을 것 이다.프레임 워 크 라 고 불 리 는 것 이 든 더 유행 하고 더 밑바닥 에 있 는 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));
}
장점:
단점:
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));
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
디자인 모델 의 공장 모델, 단일 모델자바 는 23 가지 디자인 모델 (프로 그래 밍 사상/프로 그래 밍 방식) 이 있 습 니 다. 공장 모드 하나의 공장 류 를 만들어 같은 인 터 페 이 스 를 실현 한 일부 종 류 를 인 스 턴 스 로 만 드 는 것...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.