VBA と Java のオブジェクト指向プログラミング

Top > Excel VBA でデザインパターン > Adapterパターン(委譲)

Adapterパターン(委譲)


委譲を使ったAdapterパターンのサンプルプログラムをExcelVBAで記述すると
以下のようになります。モジュールごとにプログラムを示します。

標準モジュール:modCBanner
'=================================================>>>>>>>>>>
'標準モジュール:modCBanner
'===========================================================
'VBA のクラスにはコンストラクタを定義できないので
'標準モジュールに定義されたプロシージャを変わりに使う。
Option Explicit

'*** コンストラクタ ***
Public Function Init2(pstrValue As String) As clsCBanner
    Dim obj As clsCBanner
    Set obj = New clsCBanner
    'コンストラクタの呼び出し
    Call obj.Init2(pstrValue)
    Set Init2 = obj
End Function
'<<<<<<<<<<=================================================
クラスモジュール:clsCBanner
'=================================================>>>>>>>>>>
'クラスモジュール:clsCBanner
'===========================================================
Option Explicit
'プロパティ情報
Private mstrValue As String

'標準モジュールに定義されたコンストラクタから
'呼び出されるメソッド。
Public Sub Init2(pstrValue As String)
    mstrValue = pstrValue
End Sub

Public Sub ShowWithParen()
    Debug.Print ("(" & mstrValue & ")")
End Sub

Public Sub ShowWithAster()
    Debug.Print ("*" & mstrValue & "*")
End Sub
'<<<<<<<<<<=================================================
標準モジュール:modCPrint
'=================================================>>>>>>>>>>
'標準モジュール:modCPrint
'===========================================================
'VBA のクラスにはコンストラクタを定義できないので
'標準モジュールに定義されたプロシージャを変わりに使う。
Option Explicit

'*** コンストラクタ ***
Public Function Init1() As clsCPrint
    Dim obj As clsCPrint
    Set obj = New clsCPrint
    Set Init1 = obj
End Function
'<<<<<<<<<<=================================================
クラスモジュール:clsCPrint
'=================================================>>>>>>>>>>
'クラスモジュール:clsCPrint
'===========================================================
Option Explicit

Public Sub PrintWeak()
    'VBA の IDE は実体の無いプロシージャを
    '自動的に削除してしまうので
    'コメント行を書いておく。
End Sub

Public Sub PrintStrong()
    'VBA の IDE は実体の無いプロシージャを
    '自動的に削除してしまうので
    'コメント行を書いておく。
End Sub
'<<<<<<<<<<=================================================
標準モジュール:modCPrintBanner
'=================================================>>>>>>>>>>
'標準モジュール:modCPrintBanner
'===========================================================
'VBA のクラスにはコンストラクタを定義できないので
'標準モジュールに定義されたプロシージャを変わりに使う。
Option Explicit

'*** コンストラクタ ***
Public Function Init2(pstrValue As String _
) As clsCPrintBanner
    Dim obj As clsCPrintBanner
    Set obj = New clsCPrintBanner
    'コンストラクタの呼び出し
    Call obj.Init2(pstrValue)
    Set Init2 = obj
End Function
'<<<<<<<<<<=================================================
クラスモジュール:clsCPrintBanner
'=================================================>>>>>>>>>>
'クラスモジュール:clsCPrintBanner
'===========================================================
Option Explicit
'スーパークラス情報
Implements clsCPrint
Private mobjSuper As clsCPrint
'委譲クラス
Private mobjBanner As clsCBanner

'標準モジュールに定義されたコンストラクタから
'呼び出されるメソッド。
Public Sub Init2(pstrValue As String)
    'スーパークラスのインスタンスの生成
    Set mobjSuper = modCPrint.Init1
    '委譲クラスのコンストラクタの実行
    Set mobjBanner = modCBanner.Init2(pstrValue)
End Sub

'clsCPrintの抽象メソッドを
'実装しているようにみせかける。
Public Sub PrintStrong()
    Call mobjBanner.ShowWithAster
End Sub

'clsCPrintの抽象メソッドを
'実装しているようにみせかける。
Public Sub PrintWeak()
    Call mobjBanner.ShowWithParen
End Sub

'-----------------------------------------------------------
'clsCPrint のインターフェイス
'-----------------------------------------------------------
Private Sub clsCPrint_PrintStrong()
    Call Me.PrintStrong
End Sub

Private Sub clsCPrint_PrintWeak()
    Call Me.PrintWeak
End Sub
'<<<<<<<<<<=================================================
標準モジュール:modCMain
'=================================================>>>>>>>>>>
'標準モジュール:modCMain
'===========================================================
Option Explicit

'*** メイン処理 ***
'VBA のクラスにはクラスメソッドを定義できないので
'標準モジュールに定義されたプロシージャを変わりに使う。
Sub Main1()
    Dim objP As clsCPrint
    Set objP = modCPrintBanner.Init2("Hello")
    Call objP.PrintWeak
    Call objP.PrintStrong
End Sub
'<<<<<<<<<<=================================================


Top > Excel VBA でデザインパターン > Adapterパターン(委譲)

このページへのコメント

jmpsAP I value the blog.

0
Posted by seo thing 2013年12月20日(金) 02:40:02 返信

VBADP02_02 - VBA 鐃緒申 Java 鐃塾ワ申鐃瞬ワ申鐃緒申鐃緒申鐃夙指醐申鐃竣ワ申鐃緒申鐃淳ワ申 - Seesaa Wiki鐃淑ワ申鐃緒申鐃緒申鐃緒申 for 鐃緒申鐃殉¥申鐃夙フワ申鐃緒申 ≪潟若 ≪ http://www.pslcbi.com/moncler2014.html

0
Posted by ≪潟若 ≪ 2013年12月10日(火) 10:21:41 返信

VBADP02_02 - VBA 鐃緒申 Java 鐃塾ワ申鐃瞬ワ申鐃緒申鐃緒申鐃夙指醐申鐃竣ワ申鐃緒申鐃淳ワ申 - Seesaa Wiki鐃淑ワ申鐃緒申鐃緒申鐃緒申 for 鐃緒申鐃殉¥申鐃夙フワ申鐃緒申 ≪潟若 鴻若若潟 http://www.pslcbi.com/moncler2014.html

0
Posted by ≪潟若 鴻若若潟 2013年12月10日(火) 00:25:11 返信

VBADP02_02 - VBA 鐃緒申 Java 鐃塾ワ申鐃瞬ワ申鐃緒申鐃緒申鐃夙指醐申鐃竣ワ申鐃緒申鐃淳ワ申 - Seesaa Wiki鐃淑ワ申鐃緒申鐃緒申鐃緒申 for 鐃緒申鐃殉¥申鐃夙フワ申鐃緒申 ≪潟若 http://www.pslcbi.com/moncler2014.html

0
Posted by ≪潟若  2013年12月07日(土) 11:51:21 返信

i5eat0 <a href="http://eydbdvhvgdxw.com/">eydbdvhvgdxw</a>, [url=http://rptunusecswr.com/]rptunusecswr[/url], [link=http://fdwbrvmaxmsx.com/]fdwbrvmaxmsx[/link], http://ucyqvgxbeqsu.com/

0
Posted by czhsjoaew 2013年11月15日(金) 04:30:30 返信

コメントをかく


「http://」を含む投稿は禁止されています。

利用規約をご確認のうえご記入下さい

×

この広告は60日間更新がないwikiに表示されております。

編集にはIDが必要です