C \ # 디자인 모델 의 1 - 간단 한 공장 모델
OO 프로 그래 밍 에서 가장 많이 사용 되 는 모델 은 간단 한 공장 (Simple Factory) 모델 이다.
간단 한 공장 모델 은 제 공 된 데이터 나 매개 변수 에 따라 몇 개의 가능 한 클래스 중의 한 인 스 턴 스 를 되 돌려 줍 니 다. 통속 적 인 점 은 대상 을 대상 으로 프로 그래 밍 하 는 다 형 성, 하나의 기본 클래스, 여러 개의 파생 클래스 가 있 습 니 다. 다른 호출 프로그램 에서 매개 변수 에 따라 이 기본 클래스 의 구체 적 인 파생 류 를 되 돌려 주 고 반환 값 은 기본 유형 입 니 다.기 류 의 인용 은 파생 류 대상 을 가리 킬 수 있 고 이 모든 파생 류 는 기 류 를 가 진 함 수 를 포함 하기 때문이다. 즉, 파생 류 에는 같은 함수 가 있 지만 함수 의 실현 은 다 를 수 있다.
간단 한 공장 모델 에서 보통 돌아 오 는 모든 유형 은 공 통 된 기본 유형 과 공 통 된 방법 이 있 지만 모든 유형 은 서로 다른 기능 을 완성 하고 서로 다른 데이터 유형 에 대해 서로 다른 최적화 를 했다.간단 한 공장 모델 은 실제 적 으로 23 개의 상용 디자인 모델 중 하나 가 아니 지만 디자인 모델 의 간단 한 입문 이 라 고 할 수 있어 앞으로 의 학습 에 큰 도움 이 될 것 이다.
간단 한 이해, 간단 한 공장 모델 은 대상 을 대상 으로 프로 그래 밍 하 는 다 형 성 을 더 많이 사용 했다. 기본 적 인 인용 은 파생 류 를 가리 키 고 파생 하 는 방법, 즉 다 형 성 을 호출 할 수 있다.
X 가 하나의 기본 클래스 라 고 가정 하면 XY 와 XZ 는 모두 X 에 파 견 된 파생 클래스 입 니 다. XPactory 류 에서 제 공 된 매개 변수 에 따라 XY 나 클래스 의 어느 것 을 되 돌려 주 는 지 결정 합 니 다. 어떤 인 스 턴 스 를 되 돌려 주 는 지 는 프로그래머 에 게 그렇게 중요 하지 않 습 니 다. 이런 유형 은 똑 같은 방법 을 가지 기 때문에 프로그래머 가 해 야 할 일 은 기본 적 인 인용 을 통 해 직접 호출 방법 을 참조 하 는 것 입 니 다.어떤 파생 류 로 돌아 가 는 지 에 대해 서 는 신경 쓰 지 않 아 도 된다. 같은 방법 이 있 기 때문에 다 를 뿐이다.어떤 파생 류 로 돌아 갈 지 는 공장 의 설계 에 달 려 있다. 이 방법 은 매우 복잡 한 함수 일 수도 있 고 간단 한 함수 일 수도 있다.
다음은 구체 적 인 예 를 들 어 본 예 는 (과학 출판사) 라 는 책 을 인용 했다.
이름 을 저장 할 클래스 가 있다 고 가정 하면 이름과 이름 을 각각 저장 합 니 다.이 종류의 기본 코드 는 다음 과 같다.
using System;
namespace NameFactory
{
///
/// Summary description for Namer.
///
//Base class for getting split names
public class Namer {
//parts stored here
protected string frName, lName;
//return first name
public string getFrname(){
return frName;
}
//return last name
public string getLname() {
return lName;
}
}
}
이 종류 에서 각각 이름과 성 을 되 돌 릴 수 있다.protected string frName, lName;보 호 받 는 두 변 수 는 파생 류 에 의 해 계 승 될 수 있다.
현재 우 리 는 매우 간단 한 파생 류 두 개 를 파생 시 키 고 파생 류 에서 이름 을 두 부분 으로 나 누 었 다.성 이 앞 에 있 으 면 이름 이 뒤에 있 고 중간 에 빈 칸 으로 나 뉘 는데 책임 은 First 클래스 이 고, 성 이 뒤에 있 으 면 앞 에 있 고 중간 에 있다 "며" 나 누 면 LastFirst 클래스 다.두 가지 유형의 디자인 은 다음 과 같다.
using System;
namespace NameFactory
{
///
/// Summary description for FirstFirst.
///
public class FirstFirst : Namer
{
public FirstFirst(string name)
{
int i = name.IndexOf (" ");
if(i > 0) {
frName = name.Substring (0, i).Trim ();
lName = name.Substring (i + 1).Trim ();
}
else {
lName = name;
frName = "";
}
}
}
}
using System;
namespace NameFactory
{
///
/// Summary description for LastFirst.
///
public class LastFirst : Namer
{
public LastFirst(string name) {
int i = name.IndexOf (",");
if(i > 0) {
lName = name.Substring (0, i);
frName = name.Substring (i + 1).Trim ();
}
else {
lName = name;
frName = "";
}
}
}
}
두 파생 클래스 에서 구조 함 수 는 있 는 지 여부 에 따라 "," 이름 의 성과 이름 을 나 누 어 각각 저장 하 는 대응 하 는 변수 에 있 습 니 다.
그리고 우 리 는 간단 한 공장 을 구축 할 수 있 습 니 다. 쉼표 의 존 재 를 검사 한 다음 에 두 가지 중 하 나 를 되 돌려 주면 됩 니 다.
using System;
namespace NameFactory
{
///
/// Summary description for NameFactory.
///
public class NameFactory {
public NameFactory() {}
public Namer getName(string name) {
int i = name.IndexOf (",");
if(i > 0)
return new LastFirst (name);
else
return new FirstFirst (name);
}
}
}
이 공장 클래스 의 사용 은 단 추 를 추가 합 니 다. 단추 이벤트 에서 Namefactory 의 getName 방법 을 호출 하면 Namer 의 인용 을 되 돌려 줍 니 다. Namer 가 어떤 파생 클래스 를 가리 키 는 지 에 대해 서 는 관심 을 가 질 필요 가 없습니다.
private void btCompute_Click(object sender, System.EventArgs e) {
Namer nm = nameFact.getName (txName.Text );
txFirst.Text = nm.getFrname ();
txLast.Text = nm.getLname ();
}
이것 이 바로 간단 한 공장 모델 의 기본 원리 이다. 추상 을 만 든 다음 에 이 추상 적 으로 돌아 갈 수 있 는 몇 가지 유형 이 무엇 인지 결정 한다. 그 다음 에 간단 한 공장 이 그 중의 하나 로 돌아 간 다음 에 진정 으로 사용 하 는 어떤 하위 유형 을 알 필요 가 없 는 상황 에서 돌아 오 는 인 스 턴 스 방법 을 호출 할 수 있다. 이런 방법 은 데이터 의존 문제 와 유형의 사용 방법 을 분리 할 수 있다.
간단 한 공장 은 같은 방법 을 가 진 인 스 턴 스 를 되 돌려 준다. 그들 은 서로 다른 파생 류 의 인 스 턴 스 일 수도 있 고 실제 적 으로 서로 관련 이 없 는 클래스 일 수도 있다. 단지 같은 인 터 페 이 스 를 가지 고 있 을 뿐이다.어떤 방식 이 든 이런 실례 적 인 방법 은 모두 같 아서 서로 바 꾸 어 사용 할 수 있다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
【Web Design The Missing Link】Appendix: Other Approaches to Representing Links우리가 알고 있는 JSON의 링크를 나타내는 다음 가장 간단한 방법은 다음과 같다. 이 모드의 장점은 - 이 모드만 알면 - 외부 정보를 포함하지 않고 URL 값을 가진 모든 속성을 찾을 수 있다는 것입니다.또한 추...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.