C \ # 23 에서 디자인 모드 - 간단 한 공장 모드 (생 성 모드)
5831 단어 C#
일반적인 표기 법
///
///
///
class metro
{
public metro()
{
Name = " ";
merit = " ";
defect = " ";
}
public string Name { get; set; }
public string merit { get; set; }
public string defect { get; set; }
}
///
///
///
class transit
{
public transit()
{
Name = " ";
merit = " ";
defect = " ";
}
public string Name { get; set; }
public string merit { get; set; }
public string defect { get; set; }
}
///
///
///
class ascendthestairs
{
public ascendthestairs()
{
Name = " ";
merit = " ";
defect = " ";
}
public string Name { get; set; }
public string merit { get; set; }
public string defect { get; set; }
}
///
///
///
class takethelift
{
public takethelift()
{
Name = " ";
merit = " ";
defect = " ";
}
public string Name { get; set; }
public string merit { get; set; }
public string defect { get; set; }
}
상기 유형 은 두 가지 로 나 뉘 는데 하 나 는 집에 서 회사 까지 사용 하 는 교통수단 이 고 하 나 는 회사 에서 사무실 까지 사용 하 는 교통수단 이다.
프론트 코드:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApplication6
{
class Program
{
static void Main(string[] args)
{
transit me = new transit();
takethelift asc = new takethelift();
Console.WriteLine(" ");
Console.WriteLine(" {0}, {1}, {2}", me.Name, me.merit, me.defect);
Console.WriteLine(" {0} , {1}, {2}", asc.Name, asc.merit, asc.defect);
transit me1 = new transit();
takethelift asc1 = new takethelift();
Console.WriteLine(" ");
Console.WriteLine(" {0}, {1}, {2}", me1.Name, me1.merit, me1.defect);
Console.WriteLine(" {0} , {1}, {2}", asc1.Name, asc1.merit, asc1.defect);
Console.Read();
}
}
}
간단 한 공장 으로 실현:
1. 인 터 페 이 스 를 만 듭 니 다. Iduty 는 집에 서 회사 까지 의 교통 수단 을 추상 적 으로 사용 합 니 다.
public interface IComeUp
{
}
2. 추상 적 인 회사 에서 사무실 로 가 는 교통수단 에 사용 할 인 터 페 이 스 를 만 듭 니 다.
public interface Iduty
{
}
3. 매 거 진 만 들 기
public enum transitType
{
metero = 1,
transit = 2,
takethelift = 3,
ascendthestairs = 4
}
4. 4 개의 종 류 를 각각 해당 하 는 인 터 페 이 스 를 계승 한다.
class metro : Iduty
class takethelift : IComeUp
class transit : Iduty
class ascendthestairs : IComeUp
5. 공장 류 를 만 들 고 사례 화 대상 에 사용 하 며 고객 이 구체 적 으로 어떻게 실현 되 는 지 알 지 않 아 도 된다.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApplication6
{
class Factory
{
public static Iduty Show(transitType i)
{
Iduty id = null;
switch (i)
{
case transitType.metero:
id = new metro();
break;
case transitType.transit:
id = new transit();
break;
default:
break;
}
return id;
}
public static IComeUp Show1(transitType i)
{
IComeUp id = null;
switch (i)
{
case transitType.takethelift:
id = new takethelift();
break;
case transitType.ascendthestairs:
id = new ascendthestairs();
break;
default:
break;
}
return id;
}
}
}
6. 프런트 호출
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApplication6
{
class Program
{
static void Main(string[] args)
{
metro me = Factory.Show(transitType.metero) as metro;
ascendthestairs asc = Factory.Show1(transitType.ascendthestairs) as ascendthestairs;
Console.WriteLine(" ");
Console.WriteLine(" {0}, {1}, {2}", me.Name, me.merit, me.defect);
Console.WriteLine(" {0} , {1}, {2}", asc.Name, asc.merit, asc.defect);
transit me1 = new transit();
takethelift asc1 = new takethelift();
Console.WriteLine(" ");
Console.WriteLine(" {0}, {1}, {2}", me1.Name, me1.merit, me1.defect);
Console.WriteLine(" {0} , {1}, {2}", asc1.Name, asc1.merit, asc1.defect);
Console.Read();
}
}
}
총결산
상기 코드 는 간단 한 공장 으로 작성 하고 일반적인 작성 과 의 차이 점:
프론트 데스크 에서 호출 할 때 대상 이 어떻게 왔 는 지 알 필요 가 없고 대응 하 는 방법 을 직접 호출 하면 된다. 대상 의 실례 화 는 공장 류 에 의 해 이 루어 진다.
단점:
매번 새로운 유형 을 추가 할 때마다 공장 류 의 코드 를 수정 해 야 한다. 여 기 는 개폐 원칙 을 위반 하기 때문에 간단 한 공장 은 돌아 가서 사용 하지 않 지만 간단 한 공장 을 배 워 야 다른 공장 모델 을 배 울 수 있다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
WebView2를 Visual Studio 2017 Express에서 사용할 수 있을 때까지Evergreen .Net Framework SDK 4.8 VisualStudio2017에서 NuGet을 사용하기 때문에 패키지 관리 방법을 packages.config 대신 PackageReference를 사용해야...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.