Click here to load reader

디자인 패턴 - 생성

  • Upload
    cardea

  • View
    148

  • Download
    0

Embed Size (px)

DESCRIPTION

디자인 패턴 - 생성. 발표 강 희기 – 한발 ( 한국개발자 ) 커뮤니티 활동 목표 객체 생성을 삽질 안 하는 객체지향적으로 구조화된 코드로 작성하자 . - Factory Method - Abstract Factory - Builder 특히 FactoryMethod 와 AbstractFactory 의 정확한 차이점을 이해하자. 디자인 패턴 - Factory Method. Factory Method( or Factory) Pattern 반복되는 객체 생성 문제에 대한 해법을 제시 - PowerPoint PPT Presentation

Citation preview

1

- () .- Factory Method- Abstract Factory- Builder FactoryMethod AbstractFactory . - Factory MethodFactory Method( or Factory) Pattern 1 (new) . 2 .

. - Factory MethodStarCraft : http://ko.wikipedia.org/wiki/%EC%8A%A4%ED%83%80%ED%81%AC%EB%9E%98%ED%94%84%ED%8A%B8%EC%9D%98_%EC%A2%85%EC%A1%B1

- () : , ,SCV, , , : , , ,

- () : (,) : , , () : , , , () - Factory Method1 .

drone = new ();drone.doWork();drone = new ();drone.doWork();

prove = new ();prove.doWork();

scv = new ();scv.doWork();

- Factory Method2 .

. unit = new ();unit.doWork();

.

>> . - Factory Method .Class AllUnitFactory(){ Create(UnitType unitType) { if(unitType == )return new (); if(unitType == )return new (); if(unitType == )return new (); }} 1,2 . - Factory Method .

+ Create(UnitType type) UnitType - Factory Method enum UnitType = {,,,,};void main(){ factory = new ();// unit = factory.Create(); unit .doWork();unit = factory.Create();unit = factory.Create(); unit = factory.Create(); // unit = factory.Create(); } . >> . - Factory Method

type .>> ( , ) 1,2, , , 1,2., , , ,, , , SCV,, , , - Factory Method>> type size .

- Factory Method.Define an interface for creating an object, but let subclasses decide which class to instantiate. Factory Method lets a class defer instantiation to subclasses.

. factorMethod() .

) unitFactoy = new (); groundUnit1= unitFactoy.Create(); skyUnit1= unitFactoy.Create();

) unitFactoy = new (); unit1 = unitFactoy.Create(); unit2 = unitFactoy.Create();

>> Create Create .

- Factory Method.

>> , .> . > () . .

- Abstract Factory () >> , .

>> . ?

- Abstract Factory

- Abstract Factory - UnitType , ( .)

// Create(UnitType unitType){if(unitType == )return new (); // if(unitType == )return new ();}

// Create(UnitType unitType){if(unitType == )return new ();}

Abstract Factory

Create()Create() : . . : . - Abstract Factory -> . (?)

1. - : , , - : , ,

2. - : , , , , - : , , , , - Abstract Factory

- Abstract Factory public sealed class SqlClientFactory : DbProviderFactory{// Fieldspublic static readonly SqlClientFactory Instance;

// Methodsstatic SqlClientFactory();private SqlClientFactory();public override DbCommand CreateCommand();public override DbCommandBuilder CreateCommandBuilder();public override DbConnection CreateConnection();public override DbConnectionStringBuilder CreateConnectionStringBuilder();public override DbDataAdapter CreateDataAdapter();public override DbDataSourceEnumerator CreateDataSourceEnumerator();public override DbParameter CreateParameter();public override CodeAccessPermission CreatePermission(PermissionState state);

// Propertiespublic override bool CanCreateDataSourceEnumerator { get; }}

// CreateCommand SqlCommand .. public override DbCommand CreateCommand(){return new SqlCommand();}

- Abstract Factory

DbProviderFactory dbProviderFactory;DataTable tblFactoryClass = DbProviderFactories.GetFactoryClasses(); ConnectionStringSettings dbConnectionSettings;

dbConnectionSettings = ConfigurationManager.ConnectionStrings[tblFactoryClass.Rows[iProvider][0].ToString()];dbProviderFactory = DbProviderFactories.GetFactory(tblFactoryClass.Rows[iProvider]); // 3 SqlServer

DbCommand dbCommand = dbProviderFactory.CreateCommand();DbConnection dbConnection = null; DbParameter dbParameter1 = dbProviderFactory.CreateParameter();dbParameter1.ParameterName = "@PAGE";dbParameter1.DbType = DbType.Int32;dbParameter1.Size = 4;dbParameter1.Value = NowPage;dbCommand.Parameters.Add(dbParameter1); DbParameter dbParameter2 = dbProviderFactory.CreateParameter();dbParameter2.ParameterName = "@PAGE_SIZE";dbParameter2.DbType = DbType.Int32;dbParameter2.Size = 4;dbParameter2.Value = PageSize; dbCommand.Parameters.Add(dbParameter2);dbCommand.CommandText = "BoardPagingSelect";dbCommand.CommandType = CommandType.StoredProcedure; //default

DataTable tblResult = new DataTable();using (TransactionScope transactionScope = new TransactionScope()) //default TransactionScope{dbConnection = dbProviderFactory.CreateConnection();dbConnection.ConnectionString = dbConnectionSettings.ConnectionString;dbConnection.Open(); dbCommand.Connection = dbConnection;dbCommand.CommandType = CommandType.StoredProcedure;dbCommand.CommandText = "BoardPagingSelect";dbCommand.CommandTimeout = dbHelper.IntTimeout; if (dbHelper.IsPrepare)dbCommand.Prepare(); DbDataAdapter dbHelperAdapter = dbProviderFactory.CreateDataAdapter();dbHelperAdapter.SelectCommand = dbCommand;dbHelperAdapter.Fill(tblResult);

if (dbConnection.State != ConnectionState.Closed)dbConnection.Close(); BoardDataList.DataSource = tblResult;BoardDataList.DataBind();}

- Builder .()Direct

CreateCreate GetResult(); // GetResult Direct . - Builder

Builder Factory Method - Builder