Top > Excel VBA ¤Ç¥Ç¥¶¥¤¥ó¥Ñ¥¿¡¼¥ó > FactoryMethod¥Ñ¥¿¡¼¥ó
FactoryMethod¥Ñ¥¿¡¼¥ó¤Î¥µ¥ó¥×¥ë¥×¥í¥°¥é¥à¤òExcelVBA¤Çµ½Ò¤¹¤ë¤È°Ê²¼¤Î
¤è¤¦¤Ë¤Ê¤ê¤Þ¤¹¡£¥â¥¸¥å¡¼¥ë¤´¤È¤Ë¥×¥í¥°¥é¥à¤ò¼¨¤·¤Þ¤¹¡£
Top > Excel VBA ¤Ç¥Ç¥¶¥¤¥ó¥Ñ¥¿¡¼¥ó > FactoryMethod¥Ñ¥¿¡¼¥ó
FactoryMethod¥Ñ¥¿¡¼¥ó¤Î¥µ¥ó¥×¥ë¥×¥í¥°¥é¥à¤òExcelVBA¤Çµ½Ò¤¹¤ë¤È°Ê²¼¤Î
¤è¤¦¤Ë¤Ê¤ê¤Þ¤¹¡£¥â¥¸¥å¡¼¥ë¤´¤È¤Ë¥×¥í¥°¥é¥à¤ò¼¨¤·¤Þ¤¹¡£
Option Explicit
'¥³¥ó¥¹¥È¥é¥¯¥¿
Public Function init2(pobjConcrete As clsIObject) As clsIObject
Dim obj As Object
Set obj = New clsIObject
'Ãê¾Ý¥á¥½¥Ã¥É¤Î¼ÂºÝ¤Î½èÍý¤¬µ½Ò¤µ¤ì¤Æ¤¤¤ë¥µ¥Ö¥¯¥é¥¹¤Î¥¤¥ó¥¹¥¿¥ó¥¹¤ò°ú¿ô¤ÇÅϤ¹
obj.init2 pobjConcrete
Set init2 = obj
End Function
Option Explicit
'Ãê¾Ý¥á¥½¥Ã¥É¤Î¼ÂºÝ¤Î½èÍý¤¬µ½Ò¤µ¤ì¤Æ¤¤¤ë¥µ¥Ö¥¯¥é¥¹¤Î¥¤¥ó¥¹¥¿¥ó¥¹
Private mobjConcrete As clsIObject
'¥³¥ó¥¹¥È¥é¥¯¥¿
Public Sub init2(pobjConcrete As clsIObject)
Set mobjConcrete = pobjConcrete
End Sub
Public Property Get concrete() As clsIObject
Set concrete = mobjConcrete
End Property
Option Explicit
'¥³¥ó¥¹¥È¥é¥¯¥¿
Public Function init2(pobjConcrete As clsIObject) As clsIFactory
Dim obj As clsIFactory
Set obj = New clsIFactory
obj.init2 pobjConcrete
Set init2 = obj
End Function
Option Explicit
'¥¹¡¼¥Ñ¡¼¥¯¥é¥¹¤Î¾ðÊó
Implements clsIObject
Private mobjSuper As clsIObject
'¥³¥ó¥¹¥È¥é¥¯¥¿
Public Sub init2(pobjConcrete As clsIObject)
Set mobjSuper = modIObject.init2(pobjConcrete)
End Sub
Public Property Get concrete() As clsIObject
Set concrete = mobjSuper.concrete
End Property
Public Function create(pstrOwner As String) As clsIProduct
Dim objConcrete As clsIFactory
Dim objRtn As clsIProduct
Set objConcrete = Me.concrete
Set objRtn = objConcrete.createProduct(pstrOwner)
objConcrete.registerProduct objRtn
Set create = objRtn
End Function
Public Function createProduct(pstrOwner As String) As clsIProduct
'
End Function
Public Sub registerProduct(pobjProduct As clsIProduct)
'
End Sub
'----------------------------------------
' clsIObject ¤Î¥¤¥ó¥¿¡¼¥Õ¥§¥¤¥¹
'----------------------------------------
Private Sub clsIObject_init2(pobjConcrete As clsIObject)
'
End Sub
Private Property Get clsIObject_concrete() As clsIObject
Set clsIObject_concrete = Me.concrete
End Property
Option Explicit
'¥³¥ó¥¹¥È¥é¥¯¥¿
Public Function init1() As clsCIDCardFactory
Dim obj As clsCIDCardFactory
Set obj = New clsCIDCardFactory
obj.init1
Set init1 = obj
End Function
Option Explicit
'¥¹¡¼¥Ñ¡¼¥¯¥é¥¹¤Î¾ðÊó
Implements clsIObject
Implements clsIFactory
Private mobjSuper As clsIFactory
'¥×¥í¥Ñ¥Æ¥£¾ðÊó
'ArrayList ¤ò Collection ¤ÇÂåÍÑ
Private mcolOwners As Collection
'¥³¥ó¥¹¥È¥é¥¯¥¿
Public Sub init1()
' '¥¹¡¼¥Ñ¡¼¥¯¥é¥¹¤Î¥³¥ó¥¹¥È¥é¥¯¥¿¤Î¸Æ¤Ó½Ð¤·
Set mobjSuper = modIFactory.init2(Me)
Set mcolOwners = New Collection
End Sub
Public Property Get concrete() As clsIObject
Set concrete = mobjSuper.concrete
End Property
Public Function create(owner As String) As clsIProduct
mobjSuper.create owner
End Function
Public Property Get owners() As Collection
Set owners = mcolOwners
End Property
'----------------------------------------
' clsIFactory ¤Î¥¤¥ó¥¿¡¼¥Õ¥§¥¤¥¹
'----------------------------------------
Private Sub clsIFactory_init2(pobjConcrete As clsIObject)
On Error GoTo error_proc
Err.Raise 1, , "¥¹¡¼¥Ñ¡¼¥¯¥é¥¹¤Î¥³¥ó¥¹¥È¥é¥¯¥¿¤Ï¼Â¹Ô¤Ç¤¤Þ¤»¤ó¡£"
Exit Sub
error_proc:
Debug.Print "clsCIDCardFactory.clsIFactory_init2:" & Err.Number & ":" & Err.Description
Err.Raise Err.Number, , Err.Description
End Sub
Private Property Get clsIFactory_concrete() As clsIObject
Set clsIFactory_concrete = Me.concrete
End Property
Private Function clsIFactory_create(owner As String) As clsIProduct
Set clsIFactory_create = mobjSuper.create(owner)
End Function
Private Function clsIFactory_createProduct(owner As String) As clsIProduct
Set clsIFactory_createProduct = modCIDCard.init2(owner)
End Function
Private Sub clsIFactory_registerProduct(product As clsIProduct)
Dim obj As clsCIDCard
Set obj = product
mcolOwners.Add obj.owner
End Sub
'----------------------------------------
' clsIObject ¤Î¥¤¥ó¥¿¡¼¥Õ¥§¥¤¥¹
'----------------------------------------
Private Sub clsIObject_init2(pobjConcrete As clsIObject)
On Error GoTo error_proc
Err.Raise 1, , "¥¹¡¼¥Ñ¡¼¥¯¥é¥¹¤Î¥³¥ó¥¹¥È¥é¥¯¥¿¤Ï¼Â¹Ô¤Ç¤¤Þ¤»¤ó¡£"
Exit Sub
error_proc:
Debug.Print "clsCIDCardFactory.clsIObject_init2:" & Err.Number & ":" & Err.Description
Err.Raise Err.Number, , Err.Description
End Sub
Private Property Get clsIObject_concrete() As clsIObject
Set clsIObject_concrete = Me.concrete
End Property
Option Explicit
'¥³¥ó¥¹¥È¥é¥¯¥¿
Public Function init2(pstrOwner As String) As clsCIDCard
Dim obj As clsCIDCard
Set obj = New clsCIDCard
obj.init2 pstrOwner
Set init2 = obj
End Function
Option Explicit
'¥¹¡¼¥Ñ¡¼¥¯¥é¥¹¤Î¾ðÊó
Implements clsIProduct
'¥×¥í¥Ñ¥Æ¥£¾ðÊó
Private mstrOwner As String
'¥³¥ó¥¹¥È¥é¥¯¥¿
Public Sub init2(pstrOwner As String)
Debug.Print pstrOwner & "¤Î¥«¡¼¥É¤òºî¤ê¤Þ¤¹¡£"
mstrOwner = pstrOwner
End Sub
Public Property Get owner() As String
owner = mstrOwner
End Property
'----------------------------------------
' clsIProduct ¤Î¥¤¥ó¥¿¡¼¥Õ¥§¥¤¥¹
'----------------------------------------
Private Sub clsIProduct_use()
Debug.Print mstrOwner & "¤Î¥«¡¼¥É¤ò»È¤¤¤Þ¤¹¡£"
End Sub
Option Explicit
'¥á¥¤¥ó½èÍý£±
Sub main1()
Dim factory As clsIFactory
Dim card1 As clsIProduct
Dim card2 As clsIProduct
Dim card3 As clsIProduct
Set factory = modCIDCardFactory.init1
Set card1 = factory.create("·ë¾ë¹À")
Set card2 = factory.create("¤È¤à¤é")
Set card3 = factory.create("º´Æ£²Ö»Ò")
card1.use
card2.use
card3.use
Dim obj As clsCIDCardFactory
Dim var As Variant
Set obj = factory
Debug.Print
For Each var In obj.owners
Debug.Print var
Next
End Sub
Top > Excel VBA ¤Ç¥Ç¥¶¥¤¥ó¥Ñ¥¿¡¼¥ó > FactoryMethod¥Ñ¥¿¡¼¥ó
- ¥«¥Æ¥´¥ê¡§
- ¥Ñ¥½¥³¥ó
- ¥×¥í¥°¥é¥ß¥ó¥°
¤³¤Î¥Ú¡¼¥¸¤Ø¤Î¥³¥á¥ó¥È
6vk4xm Thanks for sharing, this is a fantastic blog.Much thanks again. Great.
VBADP04 - VBA �� Java �Υ��֥������Ȼظ��ץ����ߥ� - Seesaa Wiki�ʥ������� for ���ޡ��ȥե��� モンクレール セール http://www.pslcbi.com/moncler2014.html
rTcykS <a href="http://mbmpyqeympjx.com/">mbmpyqeympjx</a>, [url=http://uraliejpsqqf.com/]uraliejpsqqf[/url], [link=http://sujejtbpfped.com/]sujejtbpfped[/link], http://hulxahncsefq.com/
Fr2AWZ <a href="http://yyyazgyzswtd.com/">yyyazgyzswtd</a>, [url=http://jhgviwziumyv.com/]jhgviwziumyv[/url], [link=http://beykpzowntuy.com/]beykpzowntuy[/link], http://qirkymdqcyjj.com/