C \ # 디자인 모델 의 1 - 간단 한 공장 모델

4451 단어 DesignPattern
저 는 최근 에 C \ # 디자인 모델 을 배 웠 기 때문에 배 운 것 을 적어 서 여러분 과 공유 하 겠 습 니 다.C \ # 의 디자인 모델 에 대해 전문 적 으로 쓸 것 입 니 다.
 
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 ();
		}

 
이것 이 바로 간단 한 공장 모델 의 기본 원리 이다. 추상 을 만 든 다음 에 이 추상 적 으로 돌아 갈 수 있 는 몇 가지 유형 이 무엇 인지 결정 한다. 그 다음 에 간단 한 공장 이 그 중의 하나 로 돌아 간 다음 에 진정 으로 사용 하 는 어떤 하위 유형 을 알 필요 가 없 는 상황 에서 돌아 오 는 인 스 턴 스 방법 을 호출 할 수 있다. 이런 방법 은 데이터 의존 문제 와 유형의 사용 방법 을 분리 할 수 있다.
간단 한 공장 은 같은 방법 을 가 진 인 스 턴 스 를 되 돌려 준다. 그들 은 서로 다른 파생 류 의 인 스 턴 스 일 수도 있 고 실제 적 으로 서로 관련 이 없 는 클래스 일 수도 있다. 단지 같은 인 터 페 이 스 를 가지 고 있 을 뿐이다.어떤 방식 이 든 이런 실례 적 인 방법 은 모두 같 아서 서로 바 꾸 어 사용 할 수 있다.

좋은 웹페이지 즐겨찾기