c\#공장 모델 에 대한 상세 한 설명

4740 단어 c#공장 모드
무엇이 공장 모델 입 니까?생활 속 의 개념 과 비교 하면 우리 가 전 화 를 해 야 할 때 우 리 는 핸드폰 이 필요 하 다.우 리 는 보통 핸드폰 을 파 는 오프라인 매장 에 가서 사 는 것 을 선택한다.그러나 프로 그래 밍 에서 우 리 는 하나의 유형(Phone A 또는 Phone B)을 호출 하 는 방법 이 필요 할 때 우 리 는 그 가 어떻게 new 로 나 왔 는 지 에 관심 을 가 져 야 한다(코드 세그먼트 1 참조).이것 은 마치 우리 자신 이 공장 에 가서 그들 에 게 네가 내 가 필요 로 하 는 휴대 전 화 를 어떻게 생산 해 야 하 는 지 알려 주 는 것 과 같다.우 리 는 그 가 전 화 를 할 수 있 는 지 없 는 지 에 만 관심 이 있다.네가 어떻게 하 는 지 는 내 가 무슨 상관 이 야.그래서 공장 모델 이 생 겼 어 요.공장 모델 은 사실은 공장 을 추상 화 하 는 것 이다.내 가 어떤 휴대 전 화 를 필요 로 하 는 지,어느 공장 에 가서 사면 된다.나 는 그의 제작 과정 에 관심 을 가 질 필요 가 없다.너 는 내 가 원 하 는 기능 의 휴대 전 화 를 생산 할 수만 있다 면 된다.그래서 우 리 는 간단 한 공장 을 도입 해 야 한다.우 리 는 핸드폰 이 어떻게 생산 되 는 지 에 더 이상 관심 을 가지 지 않 아 도 된다.구체 적 인 코드 의 실현 은 코드 세그먼트 2

public class Customer
{
    public void CallSomeOne(){
        PhoneA p1 = new PhoneA();
        p1.Call();
    }
}
public class PhoneA
{
    public void Call(){}
}
public class PhoneB
{
    public void Call(){}
}
코드 세그먼트 1:일반적인 호출 방식

using System;
namespace Example1
{
    public interface IProduct { }
    public class PhoneA : IProduct { }
    public class PhoneB : IProduct { }
    public class Factory
    {
        public IProduct Create()
        {
            // 。
            return new PhonetA ();
        }
    }
}
using System;
namespace Example1
{
    public enum Category
    {
        A,

    }
    public static class ProductFactory
    {
        public static IProduct Create(Category category)
        {
            switch (category)
            {
                case Category.A:
                    return new PhoneA();
                case Category.B:
                    return new PhoneB();
                default:
                    throw new NotSupportedException();
            }
        }
    }
}
코드 세그먼트 2:간단 한 공장 모델 의 실현

[TestMethod]
        public void Test()
        {
            Factory factory = new Factory();
            IProduct phone = factory.Create();   
            Assert.AreEqual<Type>(phone.GetType(), typeof(PhoneA));
        }
코드 세그먼트 3:간단 한 공장 모델 에 대한 테스트 새로운 문 제 는 방금 도 언급 했다.우 리 는 전화 만 할 수 있 는 핸드폰 만 있 으 면 오프라인 매장 에 가서 사고 싶 습 니 다.저 는 어느 공장 에서 생산 하 는 지 관심 이 없습니다.간단 한 공장 에서 우 리 는 어느 공장 에서 생산 하 는 지 관심 이 필요 합 니 다(코드 세그먼트 3 참조).그래서 우 리 는 코드 안에서 오프라인 매장 을 실현 한다.그러면 우 리 는 도대체 어느 공장 에서 생산 한 것 인지 에 관심 을 가 질 필요 가 없다.그래서 우 리 는 추상 적 인 공장 을 도입 해 야 한다.그러면 우 리 는 오프라인 매장 과 만 나 야 한다.어떤 공장 을 찾 아가 휴대 전 화 를 가 져 가 야 하 는 지 더 이상 신경 쓰 지 말 아야 한다.구체 적 인 실현 은 코드 세그먼트 4.우 리 는 배치 파일 을 이용 하여 공장 에 대한 선택 을 실현 하고 제품 에 대한 선택 을 실현 할 수 있다.본 고 는 다른 개념 을 도입 하고 싶 지 않 기 때문에 여기 서 토론 하지 않 는 다.

namespace Example2
{
    /// <summary>
    ///
    /// </summary>
    public interface IFactory
    {
        IProduct Create();  //  ――
    }
    /// <summary>
    ///
    /// </summary>
    public class FactoryA : IFactory
    {
        public IProduct Create()
        {
            return new PhoneA();
        }
    }
    /// <summary>
    ///
    /// </summary>
    public class FactoryB : IFactory
    {
        public IProduct Create()
        {
            return new PhoneB();
        }
    }
}
using System;
using System.Diagnostics;
namespace Example2
{
    class Client
    {
        public void SomeMethod()
        {
            IFactory factory = new FactoryA();   // Factory , FactoryA ;
            IProduct Phone = factory.Create(); // IFactory IProduct
            // ...
        }
        private IFactory factory;
        public Client(IFactory factory)     // IFactory Setter
        {
            if (factory == null) throw new ArgumentNullException("factory");
            this.factory = factory;
        }
        public void AnotherMethod()
        {
            IProduct Phone = factory.Create();
            // ... ...
        }
    }
}
소결 1.공장 방법 모델 은 전체 대상 의 설립 방법 을 중시 하 는 것 이다.2.공장 방법의 의 도 는 매우 명확 하 다.이 는 유형의 정례 화 과정 을 하위 클래스 로 지연 시 키 고 new()의 업 무 를 공장 에 맡 기 는 것 이다.이 동시에 추상 적 인 공장 정 의 를 추가 하여 일련의 통 일 된 통용 공장 방법 을 가 진 실체 공장 문 제 를 해결한다..NET 플랫폼 에서 우 리 는 배치,범 형 과 의뢰 의 방법 을 통 해 전형 적 인 모델 목적 을 실현 하 는 동시에 공장 유형 과 고객 프로그램 간 의 더욱 느슨 한 구조 과정 을 얻 을 수 있다.

좋은 웹페이지 즐겨찾기