#PARAN SILVERLIGHT#
  • Tistory
    • 관리자
    • 글쓰기
Carousel 01
Carousel 02
Previous Next

Chapter 2 - 팩토리를 이용한 동적 인스턴스 생성 C#

DESIGN PATTERN/실용주의 디자인패턴 2012. 12. 20. 16:02

책에 있는 예제는 Java 버전이라서 C# 버젼으로 변경해서 작성해보았다.

 

AbstractFactoryCreateDynamicInstance.zip

 

namespace AbstractFactoryCreateDynamicInstance.ConcreateFactory
{
    public class URL : URLInterFace
    {
        public Type Spec { get; private set; }

        public URL(Type spec)
        {
            this.Spec = spec;
        }

        
        public URLConnection openConnection()
        {
            URLConnection con = null;


            //Connection Class가 추가될 때마다 수정 필요
            if (Spec.Equals(typeof(HttpURLConnection)))
            {
                con = new HttpURLConnection();
            }
            else if (Spec.Equals(typeof(FtpURLConnection)))
            {
                con = new FtpURLConnection();
            }else
            {
                con = new OtherURLConnection();
            }

           
            return con;
        }

        
        public dynamic openConnectionDynamicCreateInstance()
        {
            //Connection Class가 추가되더라도 수정 불필요
            return System.Reflection.Assembly.GetExecutingAssembly().
                CreateInstance(Spec.ToString());
        }
    }
}

 

 

    class Program
    {
        static void Main(string[] args)
        {
            //Factory 생성
            URLInterFace url = new URL(typeof(HttpURLConnection));

 

            URLConnection StaticConnetion = url.openConnection();
            URLConnection DynamicConnection = url.openConnectionDynamicCreateInstance();

 

            Console.WriteLine(StaticConnetion.connect());
            Console.WriteLine(DynamicConnection.connect());

        }
    }

 

 

하드 코딩을 통해 어떤 객체를 생성할지를 결정하게 되면 프로그램이 실행되고 있는 도중에는 행위를 바꾸지 못한다.

=> Reflection을 사용하면 프로그램 실행도중에도 기존에는 없던 새로운 타입의 객체를 생성하도록 할 수 있다.

  반면 객체의 생성자에 인자를 전달하기 어려운 것은 동적생성의 단점이다. 

  =>이 문제를 해결 하려면 스프링을 공부

 

저작자표시 비영리 (새창열림)
블로그 이미지

파란실버라이트

To remember the time when I started learning Silver Light!

,

카테고리

  • Inforamtion Technology (281)
    • DESIGN PATTERN (33)
      • 실용주의 디자인패턴 (29)
    • SOFTWARE ENGINEERING (21)
      • Art Of Readable Code (12)
      • Object Oriented Programming (6)
      • TDD (2)
    • FRAMEWORK (22)
      • Spring.net (2)
      • LightSwitch (20)
    • PROGRAMING (58)
      • C# (20)
      • .NET (6)
      • HTML5 (7)
      • ASP.NET (9)
      • SILVERLIGHT (7)
      • Ruby On Rails (6)
    • PROJECT MANAGEMENT (10)
      • SW Version Management (7)
      • Schedulring Management (1)
    • BOOKS (18)
    • MOBILE APP (1)
      • SENCHA TOUCH (1)
    • SECURITY (5)
    • MES (1)
    • B2B (14)
      • WEBMETHODS (4)
    • ERP (53)
      • SAP/R/3 (51)
    • ABOUT TOOLS (2)
    • FUNDAMENT CONCEPT (21)
    • SOA BPM (22)
    • PORTFOLIO (0)

태그목록

  • 프로그래밍
  • 동시성
  • 병렬

최근에 받은 트랙백

글 보관함

링크

파란실버라이트

블로그 이미지

To remember the time when I started learning Silver Light!

LATEST FROM OUR BLOG

RSS 구독하기

LATEST COMMENTS

BLOG VISITORS

  • Total :
  • Today :
  • Yesterday :

Copyright © 2015 Socialdev. All Rights Reserved.

티스토리툴바