デザインパターンã®ã‚µãƒ³ãƒ—ルを掲載ã—ã¦ã¾ã™ã€‚ã“ã®ã‚«ãƒ†ã‚´ãƒªã®æ›´æ–°ã¯ã‹ãªã‚Šä¸å®šæœŸã§ã™ã€‚
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-AccessASQLServerAOracle‚ª”h¶ƒNƒ‰ƒX‚Å‚·B
DB§Œä‚Å•K—v‚Æ‚È‚éAÚ‘±A‰ðœA’ŠoAXVƒƒ\ƒ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‚í‚©‚è‚Ü‚¹‚ñ‚ªAA

•¡”‚̃VƒXƒeƒ€A—Ⴆ‚΂`A‚aA‚bA‚cƒVƒXƒeƒ€‚É“¯‚¶‚悤‚Ƀ‰ƒCƒuƒ‰ƒŠ‚ð
Žg—p‚µ‚½‚Æ‚µ‚Ü‚·BƒfƒUƒCƒ“ƒpƒ^[ƒ“‚ðŽg‚í‚È‚¢ê‡‚Í12`31s–Ú‚Ü‚Å‚Ì
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Á‚µ‚Ü‚·BX‚É‚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