.NET/설계 패턴(C#)

[설계 패턴 C#]13. 프락스 패턴(Proxy Pattern) - 가상 프락시

언제나휴일 2016. 6. 24. 14:47
반응형

13. 프락스 패턴(Proxy Pattern) - 가상 프락시


VirtualProxy.zip





▶ IConvert.cs

namespace VirtualProxy

{

    interface IConvert

    {

        string Image

        {

            get;

            set;

        }        

        void ClearImage();

        string ConvertImage(); 

    }

}


▶ ImageConverter.cs

using System;

using System.Threading;

namespace VirtualProxy

{

    class ImageConverter:IConvert

    {

        public string Image

        {

            get; 

            set;

        }

        public ImageConverter()

        {

            Image = string.Empty;

        }    

        public void ClearImage()

        {

            Image = string.Empty;

        }

        public string ConvertImage()

        {

            for (int i = 0; i < 3; i++)

            {

                Console.WriteLine("{0}이미지 변환 작업중",Image);

                Thread.Sleep(200);

            }

            Image = Image.ToLower();            

            return Image;

        }

    }

}


▶ VirtualConverter.cs

using System;

using System.Threading;

namespace VirtualProxy

{

    class VirtualConverter : IConvert

    {

        ImageConverter realconverter = new ImageConverter();

        Thread thread = null;

        public string Image

        {

            get

            {

                return realconverter.Image;

            }

            set

            {

                realconverter.Image = value;

            }

        }

        public VirtualConverter()

        {

            Image = string.Empty;

        }

        public void ClearImage()

        {

            Image = string.Empty;

        }



        public string ConvertImage()

        {

            if (thread == null)

            {

                ThreadStart threadDelegate = new ThreadStart(RealConvert);

                thread = new Thread(threadDelegate);

                thread.Start();

                return "변환을 시작하였습니다.";

            }

            return "이미 변환 작업을 요청하여 수행하고 있는 중입니다."; 

        }

        void RealConvert()

        {

            realconverter.ConvertImage();

            Console.WriteLine("변환 작업을 완료하였습니다.");

            thread = null;

        }

    }

}


▶ Program.cs

using System;

using System.Threading;

namespace VirtualProxy

{

    class Program

    {

        static void Main(string[] args)

        {

            VirtualConverter mc = new VirtualConverter();

            VirtualConverter mc2 = new VirtualConverter();

            mc.Image="EVERYDAY IS A HOLIDAY.";

            mc2.Image="WELCOME TO EHCLUB.NET.";

            mc.ConvertImage();

            mc2.ConvertImage();

            for (int i = 0; i < 4; i++)

            {

                Console.WriteLine(mc.Image);

                Console.WriteLine(mc2.Image);

                Thread.Sleep(1000);

            }

        }

    }

}


가상 프락시 실행 화면



반응형