c \ # 디자인 모드 - 구조 형 모드 - 6. 향원 모드
18906 단어 디자인 모드
예 를 들 어 봅 시다.
예 를 들 어, 예 를 들 어 나 는 20 명의 상병 이 필요 하 다. 반 은 육군 이 고 반 은 해군 이다. 우 리 는 new 20 개의 대상 이 아니 라 육군 의 대상 을 만 들 었 다 면 이전에 육군 대상 을 만 들 었 다 면 다시 new 가 필요 없다. list 에서 직접 찾 으 면 된다. 새로운 병종 을 만 났 을 때 list 에 추가 한 다음 에는 new 가 필요 없다. 이 과정 을 반복 한다.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace
{
public enum SoldierType
{
Normal,
Water
}
public abstract class Soldier
{
public string Name {
get; private set; }
protected Soldier(string name)
{
this.Name = name;
}
public Weapen WeapenInstance {
get; set; }
public abstract void Fight();
}
public sealed class NormalSoldier : Soldier
{
public NormalSoldier(string name) : base(name) {
}
public override void Fight()
{
WeapenInstance.Fire(" :" + Name + " ");
}
}
public sealed class WaterSoldier : Soldier
{
public WaterSoldier(string name) : base(name) {
}
public override void Fight()
{
WeapenInstance.Fire(" :" + Name + " ");
}
}
public abstract class Weapen
{
public abstract void Fire(string jobName);
}
public sealed class AK47 : Weapen
{
public override void Fire(string jobName)
{
Console.WriteLine(jobName);
}
}
//
public sealed class SolidierFactory
{
private static List<Soldier> soldiers;
static SolidierFactory()
{
soldiers = new List<Soldier>();
}
Soldier mySoldier = null;
public Soldier GetSoldier(string name,Weapen weapen,SoldierType soldierType)
{
foreach (Soldier soldier in soldiers)
{
// list ,
if (string.Compare(soldier.Name, name, true) == 0)
{
mySoldier = soldier;
return mySoldier;
}
}
switch (soldierType)
{
case SoldierType.Normal:
mySoldier = new NormalSoldier(name);
break;
case SoldierType.Water:
mySoldier = new WaterSoldier(name);
break;
}
mySoldier.WeapenInstance = weapen;
soldiers.Add(mySoldier);
return mySoldier;
}
}
class Program
{
static void Main(string[] args)
{
SolidierFactory solidierFactory = new SolidierFactory();
AK47 aK47 = new AK47();
for (int i = 0; i < 20; i++)
{
Soldier soldier = null;
if (i <= 10)
soldier = solidierFactory.GetSoldier(" " + (i + 1), aK47, SoldierType.Normal);
else
soldier = solidierFactory.GetSoldier(" " + (i + 1), aK47, SoldierType.Water);
soldier.Fight();
}
Console.Read();
}
}
}
향 원 모드 의 사용 필드:
시스템 에서 같은 대상 이나 비슷 한 대상 을 대량으로 사용 할 때 이 대상 들 은 대량의 메모 리 를 소모 하고 이 대상 들 은 외부 상 태 를 제거 한 후에 하나의 대상 을 통 해 대체 할 수 있다. 이때 향원 모드 를 사용 하 는 것 을 고려 할 수 있다.소프트웨어 시스템 에서 메타 모드 는 데이터베이스 연결 대상 풀, 문자열 캐 시 풀, HttpApplication 풀 등 각종 풀 기술 에 대량으로 사용 된다.
향 원 모드 의 장점:
대상 의 재 활용 을 통 해 대상 의 수 를 줄 이 고 메모 리 를 절약 했다.
향 원 모드 의 단점:
대상 의 외부 상태 와 내부 상 태 를 분리 해 야 하 며, 잘못 사용 하면 스 레 드 안전 문 제 를 일 으 켜 시스템 의 복잡 도 를 높 일 수 있다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
디자인 모델 의 공장 모델, 단일 모델자바 는 23 가지 디자인 모델 (프로 그래 밍 사상/프로 그래 밍 방식) 이 있 습 니 다. 공장 모드 하나의 공장 류 를 만들어 같은 인 터 페 이 스 를 실현 한 일부 종 류 를 인 스 턴 스 로 만 드 는 것...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.