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 풀 등 각종 풀 기술 에 대량으로 사용 된다.
향 원 모드 의 장점:
대상 의 재 활용 을 통 해 대상 의 수 를 줄 이 고 메모 리 를 절약 했다.
향 원 모드 의 단점:
대상 의 외부 상태 와 내부 상 태 를 분리 해 야 하 며, 잘못 사용 하면 스 레 드 안전 문 제 를 일 으 켜 시스템 의 복잡 도 를 높 일 수 있다.

좋은 웹페이지 즐겨찾기