デザインパターン�サンプルを掲載����。��カテゴリ�更新���り�定期��。
Simple Factoryƒpƒ^�[ƒ“
‚±‚ÌSimple Factoryƒpƒ^�[ƒ“‚͂悭ƒvƒ�ƒOƒ‰ƒ€‚ÅŒ©‚©‚¯‚éƒpƒ^�[ƒ“‚Å‚·�B
‚ ‚Ü‚è“‚­‚È‚­�AŽg‚¢‚Ç‚±‚ë‚àŠÈ’P‚ÉŽv‚¢‚‚­‚̂ł悭Œ©‚©‚¯‚Ü‚·�B

‚±‚̃pƒ^�[ƒ“‚Í�A‚ ‚éƒNƒ‰ƒX(FactoryƒNƒ‰ƒX‚Æ‚µ‚Ü‚·)‚ŃCƒ“ƒXƒ^ƒ“ƒX‚Ì
�¶�¬‚ð�s‚¢�AŒÄ‚Ñ�o‚µŒ³‚ɕԂµ‚Ü‚·�B
‚½‚¾�A‚±‚̂܂܂¾‚ÆFactoryƒNƒ‰ƒX‚͂ǂ̃Nƒ‰ƒX‚̃Cƒ“ƒXƒ^ƒ“ƒX‚ð�¶�¬‚µ‚Ä
‚æ‚¢‚©”»’f‚Å‚«‚Ü‚¹‚ñ�B”»’f�ðŒ�‚ƂȂéƒf�[ƒ^‚͌ĂÑ�o‚µŒ³‚©‚çŽó‚¯Žæ‚è‚Ü‚·�B

Factoryƒpƒ^�[ƒ“‚Ì“Á’¥‚Æ‚µ‚Ă̓vƒ�ƒOƒ‰ƒ€‚Å’¼�Únew ‚¹‚¸�AƒNƒ‰ƒX‚ð‰î‚µ‚ÄŠÔ�Ú“I
‚ɃCƒ“ƒXƒ^ƒ“ƒX‚ð�¶�¬‚·‚é“_‚Å‚·�B

—˜—p—á
ƒf�[ƒ^ƒx�[ƒXƒ‰ƒCƒuƒ‰ƒŠ‚ð—á‚É‚µ‚Ü‚·�B
DataBase‚ªŠî–{ƒNƒ‰ƒX‚Å�AMS-Access�ASQLServer�AOracle‚ª”h�¶ƒNƒ‰ƒX‚Å‚·�B
DB�§Œä‚Å•K—v‚ƂȂé�A�Ú‘±�A‰ð�œ�A’Š�o�A�X�Vƒ�ƒ\ƒbƒh‚ÍDataBase‚Å’è‹`‚µ‚Ä‚¨‚«�A
”h�¶ƒNƒ‰ƒX‚ÅŽÀ‘•‚µ‚Ü‚·�B



‚Ü‚¸‚̓fƒUƒCƒ“ƒpƒ^�[ƒ“‚ðŽg—p‚µ‚È‚¢‚Æ‚«‚̃Tƒ“ƒvƒ‹ƒR�[ƒh‚Å‚·�B
ƒf�[ƒ^ƒx�[ƒX‚ÍSQLServer‚ð‘I‘ð‚µ‚Ü‚·�B

ƒfƒUƒCƒ“ƒpƒ^�[ƒ“‚ðŽg‚í‚È‚¢
1
2
3
4
5
6
7
DataBase db = new SQLServer();

// ƒf�[ƒ^ƒx�[ƒX‚É�Ú‘±‚µ‚Ü‚·�B
db.Open();

// ƒf�[ƒ^ƒx�[ƒX�Ú‘±‚ð‰ð�œ‚µ‚Ü‚·�B
db.Close();

ŽŸ‚Í�­‚µ‚¾‚¯ƒXƒeƒbƒvƒAƒbƒv‚µ‚Ä�A
“®“I‚Ƀf�[ƒ^ƒx�[ƒX‚ð�Ø‚è‘Ö‚¦‚é�ê�‡‚̃Tƒ“ƒvƒ‹‚Å‚·�B

ƒfƒUƒCƒ“ƒpƒ^�[ƒ“‚ðŽg‚í‚È‚¢2
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
static void Main(string[] args)
{
    DataBase db = GetDataBaseInstance("MSAccess");
    
    // ƒf�[ƒ^ƒx�[ƒX‚É�Ú‘±‚µ‚Ü‚·�B
    db.Open();

    // ƒf�[ƒ^ƒx�[ƒX�Ú‘±‚ð‰ð�œ‚µ‚Ü‚·�B
    db.Close();
}

private static DataBase GetDataBaseInstance(string dbName)
{
    DataBase db = null;
    switch (dbName)
    {
        case "MSAccess":
            db = new MSAccess();
            break;
        case "SQLServer":
            db = new SQLServer();
            break;
        case "Oracle":
            db = new Oracle();
            break;
        default:
            db = new SQLServer();
            break;
    }
    return db;
}

GetDataBaseInstanceƒ�ƒ\ƒbƒh‚̈ø�”‚Ì’l‚É‚æ‚Á‚ÄŽg—p‚·‚éƒf�[ƒ^ƒx�[ƒX‚ª
Ž©—R‚É‘I‘ð‚Å‚«‚邿‚¤‚ɂȂè‚Ü‚µ‚½�B
ŽŸ‚̓fƒUƒCƒ“ƒpƒ^�[ƒ“‚ÌSimpleFactory‚ðŽg‚Á‚Ă݂܂·�B




SimpleFactory.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
using System;
using System.Collections.Generic;
using System.Text;

namespace SimpleFactory
{
    public class SimpleFactory
    {
        public DataBase DataBaseFactory(string dbName)
        {
            switch (dbName)
            {
                case "MSAccess":
                    return new MSAccess();
                case "SQLServer":
                    return new SQLServer();
                case "Oracle":
                    return new Oracle();
            }
            return new SQLServer();
        }
    }
}

program.cs
1
2
3
4
5
6
7
8
9
10
11
static void Main(string[] args)
{
    SimpleFactory factory = new SimpleFactory();
    DataBase db = factory.DataBaseFactory("Oracle");
    
    // ƒf�[ƒ^ƒx�[ƒX‚É�Ú‘±‚µ‚Ü‚·�B
    db.Open();

    // ƒf�[ƒ^ƒx�[ƒX�Ú‘±‚ð‰ð�œ‚µ‚Ü‚·�B
    db.Close();
}

‚Ü‚¸�ASimpleFactoryƒNƒ‰ƒX‚̃Cƒ“ƒXƒ^ƒ“ƒX‚ð�¶�¬‚µDataBaseFactoryƒ�ƒ\ƒbƒh‚ð
‰î‚µ‚ÄOracleƒNƒ‰ƒX‚̃Cƒ“ƒXƒ^ƒ“ƒX‚ðŽó‚¯Žæ‚Á‚Ă܂·�B


‚܂Ƃß
ƒfƒUƒCƒ“ƒpƒ^�[ƒ“‚ðŽg‚¤‚Æ‚«‚ÆŽg‚í‚È‚¢‚Æ‚«‚ð”äŠr‚·‚邯�A‚ ‚Ü‚èˆá‚¢‚ª•ª‚©‚è‚Ü‚¹‚ñ�B
‚±‚ꂪƒ�ƒŠƒbƒg‚Ȃ̂©‚Ç‚¤‚©Ž„Ž©�g‚í‚©‚è‚Ü‚¹‚ñ‚ª�A�A

•¡�”‚̃VƒXƒeƒ€�A—Ⴆ‚΂`�A‚a�A‚b�A‚cƒVƒXƒeƒ€‚É“¯‚¶‚悤‚Ƀ‰ƒCƒuƒ‰ƒŠ‚ð
Žg—p‚µ‚½‚Æ‚µ‚Ü‚·�BƒfƒUƒCƒ“ƒpƒ^�[ƒ“‚ðŽg‚í‚È‚¢�ê�‡‚Í12�`31�s–ڂ܂łÌ
GetDataBaseInstanceƒ�ƒ\ƒbƒh‚ðŠeƒVƒXƒeƒ€‚Ì’†‚ÉŽÀ‘•‚µƒCƒ“ƒXƒ^ƒ“ƒX‚ð
�¶�¬‚·‚éŽd‘g‚Ý‚ª•K—v‚ƂȂè‚Ü‚·�B



‚aƒVƒXƒeƒ€‚ňµ‚¤ƒf�[ƒ^ƒx�[ƒX‚ªPostgreSQL‚ɕςí‚Á‚½‚Æ‚µ‚Ü‚·�B
”h�¶ƒNƒ‰ƒXPostgreSQL‚ð�ì�¬‚µ�A‚aƒVƒXƒeƒ€‚ÌGetDataBaseInstanceƒ�ƒ\ƒbƒh‚É�ˆ—�‚ð
’ljÁ‚µ‚Ü‚·�B�X‚É‚cƒVƒXƒeƒ€‚Å‚àPostgreSQL‚ɕς¦‚½‚Æ‚µ‚Ü‚·�B
ƒ‰ƒCƒuƒ‰ƒŠ‚É‚ÍPostgreSQLƒNƒ‰ƒX‚ª—pˆÓ‚³‚ê‚Ä‚¢‚é‚̂ňø�”‚ð"PostgreSQL"‚É•Ï�X‚µ‚Ä
ŽÀ�s‚µ‚Ü‚·�BGetDataBaseInstanceƒ�ƒ\ƒbƒh‚É�ˆ—�‚ð’ljÁ‚µ–Y‚ê‚Ä‚¢‚é‚Ì‚Å�A
ŽÀ�s‚·‚邯SQLServerƒNƒ‰ƒX‚̃Cƒ“ƒXƒ^ƒ“ƒX‚ª•Ô‚Á‚Ä‚«‚Ü‚·�B



ƒfƒUƒCƒ“ƒpƒ^�[ƒ“‚ðŽg‚Á‚½�ê�‡‚Í�APostgreSQLƒNƒ‰ƒX‚ÆDataBaseFactoryƒ�ƒ\ƒbƒh‚ð
1“x‚¾‚¯•Ò�W‚·‚邾‚¯‚Å�A‚cƒVƒXƒeƒ€‚ÌPostgreSQL‚É•Ï�X‚µ‚Ä‚àˆø�”‚Ì"PostgreSQL"
‚¾‚¯‚Ńf�[ƒ^ƒx�[ƒX‚Ì�Ø‚è‘Ö‚¦‚ª‰Â”\‚Å‚·�B

‚¿‚å‚Á‚Æ‚µ‚½‚±‚Ƃł·‚ª�A�ÝŒv•û–@‚ªˆá‚¤‚¾‚¯‚ÅŒã�X‚̉ü�C‚âƒ�ƒ“ƒeƒiƒ“ƒX‚ª
ˆá‚Á‚Ä‚«‚Ü‚·�B
‚±‚Ì�¬‚³‚È�Ï‚Ý�d‚Ë‚ª�ÝŒvƒXƒLƒ‹‚Ì �‚‚¢/’á‚¢ ‚Ì�·‚ƂȂÁ‚Ä‚­‚é‚̂łµ‚傤‚©�B


Copyright (C) 2011 ”L‚Ì‹C‚܂܂ÈC#“ú‹L