디자인 모델 시리즈 - 공장 방법 모델
22560 단어 디자인 모드공장 방법 모델디자인 모델 시리즈대화 디자인 모드
위의 유형 도 를 보면 모든 유형의 전 구 는 전구 공장 에 의 해 만들어 진다. 이때 전 구 를 만 드 는 공장 은 기업 이 확대 되 었 기 때문에 생산량 을 늘 려 야 한다. 그러면 이때 한 공장 은 대처 할 수 없 을 것 이다. 그리고 현재 한 공장 이 만 든 전구 의 종류 도 많아 서 공장 의 제조 압력 을 더욱 높 였 다. 이때기업 증축 의 가장 좋 은 방법 은 공장 을 늘 리 고 각 공장 은 하나의 전구 제조 에 만 전념 하 는 것 이다.
1. 공장 방법 모델
먼저 공장 방법 모델 이 무엇 인지 살 펴 보 자. 대상 을 만 드 는 데 사용 되 는 인 터 페 이 스 를 정의 하고 하위 클래스 가 어떤 종 류 를 예화 할 지 결정 하도록 한다.공장 방법 은 한 종류의 실례 화 를 하위 클래스 로 지연 시 켰 다.
공장 방법 유형 도 는 다음 과 같다.
Product: 공장 방법 이 만 든 대상 의 인 터 페 이 스 를 정의 합 니 다.위의 장면 에서 전구 가 추상 적 인 것 과 같다.
Concrete Product: 구체 적 으로 제품 의 추상 적 인 구체 적 인 제품 류 를 실현 합 니 다.위의 장면 의 구체 적 인 전구 에 해당 한다.
Creator: 공장 방법 을 설명 합 니 다. 이 방법 은 제품 유형의 대상 을 되 돌려 줍 니 다.
ConcreteCreator: 공장 방법 을 다시 정의 하여 Concrete 제품 인 스 턴 스 를 되 돌려 줍 니 다.
아마도 이것 은 모두 가 이 유형 도 를 보고 약간 모호 할 것 이다. 그러나 괜찮아. 그 다음 에 우 리 는 공장 방법 모델 을 이용 하여 우리 위의 장면 을 실현 할 것 이다. (기업 의 확 대 는 더 많은 공장 을 세 워 야 한다.)
먼저, 기업 이 확대 되 었 기 때문에 생산량 을 늘 리 고 더 많은 공장 을 설립 해 야 한다. 생산 효율 을 향상 시 키 기 위해 모든 공장 은 하나의 종류의 전구 만 생산 하 는 데 전념 하고 공장 방법 모델 을 이용 하여 디자인 한 유형 도 는 다음 과 같다.
분석 하면 서 코드 구현:
첫 번 째 단 계 는 공장 이 확대 되 었 고 만들어 진 제품 은 전구 이기 때문에 우 리 는 전 구 를 먼저 추상 화 해 야 한다. 왜 추상 화 하려 고 하 는 지 이 글 을 참고 하 세 요.
- //
- public interface IBulb
- {
- //
- public void Luminescence();
- }
두 번 째 단 계 는 현재 모든 종류의 구체 적 인 전구 유형 을 실현 하 는 것 이다.코드 는 다음 과 같 습 니 다:
- //
- public class Bulb : IBulb// 、 {
- //
- public void Luminescence()
- {
- //
- }
- }
- //
- public class FrugalBulb : IBulb // 、
- {
- //
- public void Luminescence()
- {
- //
- }
- }
- //
- public class ColorBulb : IBulb
- {
- //
- public void Luminescence()
- {
- //
- }
- }
세 번 째 단 계 는 공장 이 늘 었 기 때문에 모든 공장 은 하나의 공 통 된 행 위 를 가진다. 그것 이 바로 전 구 를 만 드 는 것 이다. 그래서 앞으로 더욱 편리 하 게 공장 을 늘 리 기 위해 우 리 는 공장 도 추상적으로 하고 코드 는 다음 과 같다.
- //
- public interface IMyBulbFactory
- {
- IBulb GetBulb();//
- }
네 번 째 단 계 는 모든 종류의 전 구 를 제조 하 는 구체 적 인 공장 을 실현 하고 모든 공장 은 자신 이 만 든 종류의 전구 만 제조 하 며 코드 는 다음 과 같다.
- //
- public class BulbFactory : IMyBulbFactory
- {
- //
- public IBulb GetBulb()
- {
- return new Bulb();
- }
- }
-
- //
- public class FrugalBulbFactroy : IMyBulbFactory
- {
- //
- public IBulb GetBulb()
- {
- return new FrugalBulb();
- }
- }
-
- //
- public class ColorBulbFactroy : IMyBulbFactory
- {
- //
- public IBulb GetBulb()
- {
- return new ColorBulb();
- }
- }
이렇게 하면 기업 의 확대, 생산량 증가 문 제 를 만족 시 킬 수 있 습 니 다. 어떤 전구 가 필요 합 니까? 우 리 는 구체 적 인 공장 에 가서 해당 하 는 전 구 를 얻 으 면 됩 니 다. 주 함수 호출 은 다음 과 같 습 니 다.
- static void Main(string[] args)
- {
- //
- IMyBulbFactory bulbFactory = new BulbFactory();
- IBulb bulb = bulbFactory.GetBulb();
- bulb.Luminescence(); //
-
- //
- IMyBulbFactory frugalBulbFactroy = new FrugalBulbFactroy();
- IBulb frugalBulb = frugalBulbFactroy.GetBulb();
- frugalBulb.Luminescence(); //
-
- //
- IMyBulbFactory colorbulbFacroty = new ColorBulbFactroy();
- IBulb colorBulb = colorbulbFacroty.GetBulb();
- colorBulb.Luminescence(); //
- }
그러면 우 리 는 공장 방법 이 구체 적 인 제품 의 실례 화 를 구체 적 인 공장 유형 으로 지연 시 킬 때 클 라 이언 트 가 호출 할 때 우 리 는 어떤 구체 적 인 공장 유형 을 사용 하 는 지 보 여 줘 야 결합 도 를 높 일 수 있다 는 것 을 발견 했다.
2. 반 사 된 공장 방법 모드 사용
그렇다면 위의 결합 도 를 어떻게 접촉 합 니까?C \ # 의 반사 체 제 를 통 해 현재 모든 공장 을 설정 파일 에 배치 한 다음 에 현재 사용 해 야 할 공장 노드 를 설정 할 수 있 습 니 다. 설정 파일 은 다음 과 같 습 니 다.
- xml version="1.0" encoding="utf-8" ?>
- <configuration>
- <appSettings>
-
- <add key="bulbFactory" value=" . .BulbFactory">add>
- <add key="frugalBulbFactory" value=" . .FrugalBulbFactroy">add>
- <add key="ColorBulbFactory" value=" . .ColorBulbFactroy">add>
-
-
- <add key="NonFactory" value="bulbFactory">add>
- appSettings>
- configuration>
이것 은 우리 가 구체 적 인 공장 을 전문 적 으로 제공 하 는 종 류 를 포장 해 야 하기 때문에 이런 종 류 를 편리 하 게 하기 위해 서 나 는 결합 도 를 고려 하지 않 는 다.코드 는 다음 과 같 습 니 다:
- // nonfactoty
- public class FactroyProvider
- {
- public static IMyBulbFactory WhereToFactroy()
- {
- string fName = string.Empty;
- string factoryName = string.Empty;
- IMyBulbFactory factory = null;
-
- if(!string.IsNullOrEmpty(ConfigurationManager.AppSettings["NonFactory"]))
- {
- factoryName = ConfigurationManager.AppSettings["NonFactory"];
- if (!string.IsNullOrEmpty(ConfigurationManager.AppSettings[factoryName]))
- {
- fName = ConfigurationManager.AppSettings[factoryName];
- factory = Assembly.Load(" ").CreateInstance(fName) as IMyBulbFactory;
- }
- }
-
- return factory;
- }
- }
반 사 를 통 해 공장 을 찾 을 수 있 습 니 다. 우 리 는 앞으로 회사 규 모 를 확대 하려 면 구체 적 인 공장 사례 와 제품 사례 를 늘 리 고 배치 파일 에 배치 하면 됩 니 다.
3. 공장 방법 모델 과 공장 모델 의 차이
여기까지 만 말씀 드 리 면 궁금 한 점 이 있 을 지 모 르 겠 습 니 다. 아무튼 처음에 저 는 이 의문 이 있 었 습 니 다. 의문 은 공장 모델 과 의 차이 가 무엇 입 니까?
먼저, 에서 공장 류 의 코드 를 돌 이 켜 보면 코드 는 다음 과 같다.
- public class MyBulbFactory
- {
- public static IBulb GetBulb(string bulbName)
- {
- IBulb bulb = null;
- // ,
- switch (bulbName)
- {
- case "bulb":
- bulb = new Bulb();
- break;
- case "frugalbulb":
- bulb = new FrugalBulb();
- break;
- case "colorbulb":
-
- bulb = new ColorBulb();
- break;
- }
- return bulb;
- }
- }
이 를 통 해 알 수 있 듯 이 앞으로 우리 가 전 구 를 새로 추가 해 야 한다 면 위의 공장 류 를 수정 하고 switch 에 대응 하 는 case 분 지 를 추가 해 야 한다. 그러면 위배 된다.
개방 폐쇄 원칙, 공장 방법 은 바로 이런 제품 유형의 실례 화 를 구체 적 인 공장 류 로 지연 시 켜 실례 화 하 는 것 이다. 그러면 앞으로 신제품 이 생기 면 새로운 공장 류 와 구체 적 인 제품 만 만 만 들 면 된다. 즉, 공장 방법 모델 은 간단 한 공장 모델 을 보완 하여 개방 폐쇄 원칙 을 만족 시 켰 다.그러나 문 제 는 클 라 이언 트 가 호출 할 때마다 어떤 공장 류 를 구체 적 으로 예화 해 야 하 는 지 하 는 것 이다. 예 를 들 어:
- //
- IMyBulbFactory bulbFactory = new BulbFactory();//
- IBulb bulb = bulbFactory.GetBulb();
- bulb.Luminescence(); //
이렇게 해서 결합 성 을 증가 시 켰 다.우 리 는 위 에서 반사 류 를 사용 하여 결합 을 해 제 했 지만 또 하나의 의문 이 생 겼 다. 그러면 간단 한 공장 모델 은 제품 류 를 만 들 때 도 반 사 를 사용 하면 앞으로 제품 을 새로 만 들 때 공장 류 의 코드 를 수정 할 필요 가 없다. 즉, 간단 한 공장 모델 은 반 사 를 사용 하 는 것 처럼 개방 폐쇄 원칙 의 문 제 를 완벽 하 게 해결 할 수 있다 는 것 이다!
그렇다면 새로운 문제 가 또 나 왔 다. 그 간단 한 공장 모델 은 또 어떤 역할 을 할 수 있 을 까?
저 는 개인 적 으로 두 가지 이해 방식 이 있 습 니 다. 개인 적 인 관점 만 대표 하고 모두 자신의 관점 을 상세 하 게 말 하 기 를 바 랍 니 다. 한 마디 로 요약 하지 마 세 요 ~!
첫 번 째, 초기 디자인 모델 을 응용 할 때 프로 그래 밍 언어 가 반사 체 제 를 사용 하지 않 았 을 때 공장 방법 모델 로 간단 한 공장 모델 을 업그레이드 시 켜 개방 폐쇄 원칙 을 지원 할 수 있 도록 한다.
두 번 째, 특수 장면 에서 공장 방법 모델 은 논리 적 인 조직 을 잘 실현 할 수 있다. 예 를 들 어 본 글 에서 사용 하 는 장면 이다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
디자인 모델 의 공장 모델, 단일 모델자바 는 23 가지 디자인 모델 (프로 그래 밍 사상/프로 그래 밍 방식) 이 있 습 니 다. 공장 모드 하나의 공장 류 를 만들어 같은 인 터 페 이 스 를 실현 한 일부 종 류 를 인 스 턴 스 로 만 드 는 것...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.