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에 따라 라이센스가 부여됩니다.