공장 3 형제의 [간단 한 공장 모델], [공장 방법 모델], [추상 적 인 공장 모델]
13220 단어 C \ # 대상 지향C \ # 디자인 모드
1. [간단 한 공장 모델]
간단 한 공장 모델 개념 (Simple Factory Pattern): 공장 류 를 정의 합 니 다. 매개 변수 에 따라 서로 다른 인 스 턴 스 를 되 돌 릴 수 있 습 니 다. 만들어 진 인 스 턴 스 는 보통 공 통 된 부모 클래스 를 가지 고 있 습 니 다.간단 한 공장 모드 에서 인 스 턴 스 를 만 드 는 방법 은 정적 (static) 방법 이기 때문에 간단 한 공장 모드 는 정적 공장 방법 (Static Factory Method) 모드 라 고도 부 르 며 클래스 생 성 모드 에 속한다.
사례 분석
간단 한 공장 모델 을 사용 하여 서로 다른 기하학 적 모양 (예 를 들 어 원형, 사각형, 삼각형 등) 을 만 들 수 있 는 그림 그리 기 도 구 를 설계 하고 모든 기하학 적 도형 은 draw () 를 그리고 erase () 를 지 우 는 두 가지 방법 을 가진다.
먼저 인터페이스 클래스 를 정의 합 니 다.두 가지 방법 포함;그리 기;지우 기;
interface Draws
{
//
void draw();
//
void erase();
}
어떤 구체 적 인 제품 류 에서 이 Draws 인 터 페 이 스 를 계승 합 니 다.다음은 세 가지 도형 실현 방식 이다.
//==============================================================
// :zhoupei
// :2019/2/18 14:12:11
// :Circular
// :V1.0.1
// :
//==============================================================
class Circular : Draws
{
public void draw()
{
Console.WriteLine(" ");
}
public void erase()
{
Console.WriteLine(" ");
}
}
class Rectangle : Draws
{
//
public void draw()
{
Console.WriteLine(" ");
}
//
public void erase()
{
Console.WriteLine(" ");
}
}
class Triangle: Draws
{
public void draw()
{
Console.WriteLine(" ");
}
public void erase()
{
Console.WriteLine(" ");
}
}
공장 류, 정적 공장 방법 을 도형 처리 하기;
class FigureFactory
{
//
public static Draws Getfigure(string figtype)
{
Draws dws = null;
switch (figtype.ToLower())
{
case "rectangle":
dws = new Rectangle();
break;
case "triangle":
dws = new Rectangle();
break;
case "circular":
dws = new Rectangle();
break;
default:
dws = null;
break;
}
return dws;
}
}
클 라 이언 트 호출 방법 입 니 다. 전역 프로필 을 읽 는 방식 에 따라 경 로 를 가 져 옵 니 다.
app. config 파일 추가 하기;경로 설정 하기;
//
주 함수 호출 방법;
static void Main(string[] args)
{
Draws dw;
string figurestr = ConfigurationSettings.AppSettings["figureType"];
dw = FigureFactory.Getfigure(figurestr);
dw.draw();// -
dw.erase();// -
Console.ReadLine();
}
장단 점 총화:
1. 주요 장점
간단 한 공장 모델 의 주요 장점 은 다음 과 같다.
(1) 공장 류 는 필요 한 판단 논 리 를 포함 하고 언제 어떤 제품 류 의 인 스 턴 스 를 만 들 것 인 지 를 결정 할 수 있다. 클 라 이언 트 는 제품 대상 을 직접 만 드 는 직책 을 면제 할 수 있 고 '소비' 제품 만 있 으 며 간단 한 공장 모델 은 대상 의 설립 과 사용 의 분 리 를 실현 할 수 있다.
(2) 클 라 이언 트 는 만 든 구체 적 인 제품 류 의 유형 을 알 필요 가 없고 구체 적 인 제품 류 에 대응 하 는 매개 변수 만 알 면 된다. 복잡 한 유형 에 대해 간단 한 공장 모델 을 통 해 사용자 의 기억 량 을 어느 정도 줄 일 수 있다.
(3) 설정 파일 을 도입 함으로써 그 어떠한 클 라 이언 트 코드 도 수정 하지 않 은 상태 에서 새로운 구체 적 인 제품 류 를 교체 하고 추가 하여 어느 정도 에 시스템 의 유연성 을 향상 시 킬 수 있다.
2. 주요 단점
간단 한 공장 모델 의 주요 단점 은 다음 과 같다.
(1) 공장 류 가 모든 제품 의 창설 논리 에 집중 되 고 직책 이 너무 무 거 워 서 정상적으로 일 하지 못 하면 전체 시스템 이 영향 을 받 아야 한다.
(2) 간단 한 공장 모델 을 사용 하면 반드시 시스템 중의 개 수 를 증가 시 키 고 시스템 의 복잡 도와 이해 난이 도 를 높 일 것 이다.
(3) 시스템 확장 이 어렵 기 때문에 신제품 을 추가 하면 공장 논 리 를 수정 해 야 한다. 제품 유형 이 많 을 때 공장 의 논리 가 너무 복잡 하고 시스템 의 확장 과 유지 에 불리 할 수 있다.
(4) 간단 한 공장 모델 은 정태 적 인 공장 방법 을 사 용 했 기 때문에 공장 역할 은 계승 을 바탕 으로 하 는 등급 구 조 를 형성 하지 못 한다.
두 번 째: 공장 방법 모델
공장 방법 모델 개념: 공장 방법 모델 (Factory Method Pattern): 대상 을 만 드 는 인 터 페 이 스 를 정의 하여 하위 클래스 가 어떤 종 류 를 예화 할 지 결정 합 니 다.공장 방법 모델 은 하나의 사례 화 를 하위 클래스 로 지연 시 켰 다.공장 방법 모델 은 공장 모델 (Factory Pattern) 이 라 고도 부 르 며 가상 구조 기 모델 (Virtual Constructor Pattern) 또는 다 중 공장 모델 (Polymorphic Factory Pattern) 이 라 고도 부른다.공장 방법 모델 은 일종 의 창설 형 모델 이다.
사례 분석: 공장 방법 모드 를 사용 하여 프로그램 을 설계 하여 다양한 유형의 그림 형식 을 읽 고 모든 그림 형식 에 대해 하나의 그림 판독 기 를 설계 합 니 다. 예 를 들 어 GIF 그림 판독 기 는 GIF 형식의 그림 을 읽 는 데 사용 되 고 JPG 그림 판독 기 는 JPG 형식의 그림 을 읽 는 데 사 용 됩 니 다.시스템 의 유연성 과 확장 성 을 충분히 고려 해 야 한다.
우선 이미지 인터페이스 정의 즉 추상 적 인 제품 류 이다.코드 는 다음 과 같 습 니 다!
///
///
/// : , , 。
///
interface Imager
{
void GetImages();
}
그리고 추상 적 인 공장 류 를 정의 한다.코드 는 다음 과 같 습 니 다!
interface ImagerFactory
{
Imager GetImagelist(); //
}
현재 고객 의 요구 에 따라 JPG 형식의 그림 과 GIF 형식의 그림 을 각각 읽 어야 합 니 다.
구체 적 인 제품 류
//==============================================================
// :zhoupei
// :2019/2/18 11:45:23
// :GifImg
// :V1.0.1
// :Gif -
//==============================================================
class GifImg : Imager
{
public void GetImages()
{
Console.WriteLine(" GIF 。");
}
}
class JpgImg : Imager
{
public void GetImages()
{
Console.WriteLine(" Jpg 。");
}
}
구체 적 인 제품 공장
//==============================================================
// :zhoupei
// :2019/2/18 11:46:05
// :GifImgFactory
// :V1.0.1
// :
//==============================================================
class GifImgFactory : ImagerFactory //
{
public Imager GetImagelist()
{
Imager im = new GifImg();
return im;
}
}
class JpgImgFactory : ImagerFactory
{
public Imager GetImagelist()
{
Imager im = new JpgImg();
return im;
}
}
클 라 이언 트 Main () 호출: 방식 은 상기 와 같 습 니 다.
static void Main(string[] args)
{
ImagerFactory ifc;
Imager img;
string factStr = ConfigurationManager.AppSettings["imageFactory"];
ifc = (JpgImgFactory)Assembly.Load("FactoryMethod").CreateInstance(factStr);
img = ifc.GetImagelist();
img.GetImages();
Console.ReadLine();
}
공장 방법 모델 총화:
1. 주요 장점
공장 방법 모델 의 주요 장점 은 다음 과 같다.
(1) 공장 방법 모델 에서 공장 방법 은 고객 이 필요 로 하 는 제품 을 만 드 는 데 사용 되 는 동시에 고객 에 게 어떤 구체 적 인 제품 류 가 실례 화 될 지 를 숨 겼 다. 사용 자 는 필요 한 제품 에 대응 하 는 공장 에 만 관심 을 가 져 야 한다. 세부 적 인 제품 류 의 유형 을 알 필요 가 없다.
(2) 공장 역할 과 제품 역할 을 바탕 으로 하 는 다 형 디자인 은 공장 방법 모델 의 관건 이다.그것 은 공장 으로 하여 금 어떤 제품 의 대상 을 만 드 는 지 스스로 확정 할 수 있 게 하고, 이 대상 을 어떻게 만 드 는 지 에 대한 세부 사항 은 구체 적 인 공장 내부 에 완전히 밀봉 할 수 있다.공장 방법 모델 이 다 중 공장 모델 이 라 고도 불 리 는 이 유 는 모든 구체 적 인 공장 류 가 똑 같은 추상 적 인 부 류 를 가지 기 때문이다.
(3) 공장 방법 모델 을 사용 하 는 또 다른 장점 은 시스템 에 신제품 을 넣 을 때 추상 적 인 공장 과 추상 적 인 제품 이 제공 하 는 인 터 페 이 스 를 수정 하지 않 아 도 되 고 클 라 이언 트 를 수정 하지 않 아 도 되 며 다른 구체 적 인 공장 과 구체 적 인 제품 을 수정 하지 않 아 도 된다 는 것 이다. 그러면 시스템 의 확장 성도 매우 좋아 지고 완전히 부합 된다.개폐 원칙.
2. 주요 단점
공장 방법 모델 의 주요 단점 은 다음 과 같다.
(1) 신제품 을 추가 할 때 새로운 구체 적 인 제품 류 를 작성 해 야 하고 이에 대응 하 는 구체 적 인 공장 류 를 제공 해 야 한다. 시스템 에 있 는 류 의 개 수 는 쌍 을 이 루어 증가 하고 어느 정도 에 시스템 의 복잡 도 를 증가 하 며 더 많은 류 는 컴 파일 과 운영 이 필요 하 며 시스템 에 추가 적 인 비용 을 가 져 다 줄 것 이다.
(2) 시스템 의 확장 성 을 고려 하여 추상 층 을 도입 해 야 하기 때문에 클 라 이언 트 코드 에서 모두 추상 층 을 사용 하여 정 의 를 내 려 시스템 의 추상 성과 이해 난이 도 를 증가 시 켰 고 실현 할 때 DOM, 반사 등 기술 을 사용 하여 시스템 의 실현 난이 도 를 증가 시 켰 다.
제3 중: 추상 적 인 공장 모델
추상 적 인 공장 모델 개요: 일련의 관련 되 거나 서로 의존 하 는 대상 을 만 드 는 인 터 페 이 스 를 제공 합 니 다. 구체 적 인 종 류 를 지정 할 필요 가 없습니다. 추상 적 인 공장 모델 은 Kit 모델 이 라 고도 부 르 는데 대상 생 성 모델 입 니 다.
사례 분석: 한 소프트웨어 회사 가 새로운 모 바 일 게임 소프트웨어 를 출시 하려 고 한다. 이 소프트웨어 는 Symbian, Android 와 Windows Mobile 등 여러 스마트 폰 운영 체제 플랫폼 을 지원 하고 서로 다른 모 바 일 운영 체제 에 대해 서로 다른 게임 조작 제어 (OperationController) 류 와 게임 인터페이스 제어 (InterfaceController) 를 제공 할 수 있다.클래스, 그리고 해당 하 는 공장 클래스 를 제공 하여 이러한 종류의 초기 화 과정 을 봉인 합 니 다. 소프트웨어 는 새로운 운영 체제 플랫폼 을 지원 하기 위해 비교적 좋 은 확장 성 을 요구 합 니 다. 상기 수 요 를 만족 시 키 기 위해 추상 적 인 공장 모델 로 이 를 디자인 해 보십시오.
구체 적 인 실현:
//
interface Android
{
void Description();
}
interface Apple
{
void Description();
}
interface ASymbian
{
void Description();
}
추상 공장 클래스:
///
///
///
interface GameFactory
{
ASymbian CanRunonSymbian();
Android CanRunonAndroid();
Apple CanRunonApple();
}
구체 적 인 제품 류
//==============================================================
// :zhoupei
// :2019/2/18 16:08:35
// :InterfaceControllerOnAndroid
// :V1.0.1
// : InterfaceControllerOnAndroid
//==============================================================
class InterfaceControllerOnAndroid : Android
{
public void Description()
{
Console.WriteLine(" InterfaceControllerOnAndroid ");
}
}
class InterfaceControllerOnApple : Apple
{
public void Description()
{
Console.WriteLine(" InterfaceController ");
}
}
class InterfaceControllerOnSymbian :ASymbian
{
public void Description()
{
Console.WriteLine(" InterfaceController ");
}
}
//==============================================================
// :zhoupei
// :2019/2/18 16:07:45
// :OperationControllerOnAndroid
// :V1.0.1
// : OperationController
//==============================================================
class OperationControllerOnAndroid :Android
{
public void Description()
{
Console.WriteLine(" OperationControllerOnAndroid ");
}
}
class OperationControllerOnApple : Apple
{
public void Description()
{
Console.WriteLine(" OperationController ");
}
}
class OperationControllerOnSymbian : ASymbian
{
public void Description()
{
Console.WriteLine(" OperationController ");
}
}
구체 적 인 공장 종류:
//==============================================================
// :zhoupei
// :2019/2/18 16:10:59
// :B_InterfaceController
// :V1.0.1
// :
//==============================================================
class B_InterfaceController : GameFactory
{
public Android CanRunonAndroid()
{
return new InterfaceControllerOnAndroid();
}
public Apple CanRunonApple()
{
return new InterfaceControllerOnApple();
}
public ASymbian CanRunonSymbian()
{
return new InterfaceControllerOnSymbian();
}
}
class B_OperationController : GameFactory
{
public Android CanRunonAndroid()
{
return new OperationControllerOnAndroid();
}
public Apple CanRunonApple()
{
return new OperationControllerOnApple();
}
public ASymbian CanRunonSymbian()
{
return new OperationControllerOnSymbian();
}
}
추상 공장 모델 총화
1. 주요 장점
추상 적 인 공장 모델 의 주요 장점 은 다음 과 같다.
(1)추상 적 인 공장 모델 은 구체 적 인 유형의 생 성 을 격 리 시 켜 고객 이 무엇 을 만 들 었 는 지 알 필요 가 없다. 이러한 격 리 로 인해 구체 적 인 공장 을 바 꾸 는 것 이 상대 적 으로 쉬 워 지고 모든 구체 적 인 공장 은 추상 적 인 공장 에서 정의 하 는 공공 인 터 페 이 스 를 실현 하기 때문에 구체 적 인 공장 의 사례 만 바 꾸 면 전체 소프트웨어 시스템 의 행 위 를 어느 정도 바 꿀 수 있다.
(2) 한 제품 족 중의 여러 대상 이 함께 일 하도록 설계 되 었 을 때 클 라 이언 트 가 항상 같은 제품 족 중의 대상 만 사용 하도록 보장 할 수 있다.
(3) 새로운 제품 족 을 늘 리 는 것 이 편리 하고 기 존 시스템 을 수정 하지 않 아 도 되 며 '개폐 원칙' 에 부합 한다.
2. 주요 단점
추상 적 인 공장 모델 의 주요 단점 은 다음 과 같다.
새로운 제품 의 등급 구 조 를 늘 리 는 데 번 거 로 움 은 기 존의 시스템 에 대해 비교적 큰 수정 을 해 야 하고 심지어 추상 적 인 층 코드 를 수정 해 야 한다. 이것 은 분명히 비교적 큰 불편 을 가 져 와 '개폐 원칙' 에 위배 된다.
세 가지 공장 방식 의 학습 총화 가 끝 났 으 니 지적 과 지 도 를 환영 합 니 다.
제 대학 선생님 인 을 공부 하고 은사 님 께 감 사 드 립 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
디자인 모드 시리즈 - 상태 모드아침 8 시 반 에 일어나 머리 를 빗 고 집 을 나 와 천안문 으로 갔 는데 천안문 에 도착 하 니 이렇게 추 운 날 에 사람 이 왜 이렇게 많 지?다 들 나 처럼 뜨 거 운 마음 을 가지 고 있 구나.오문 에 들...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.