[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[jfriends] Re: ¥Ç¡¼¥¿¥Ù¡¼¥¹¤Ë³ÊǼ¤¹¤ë¥Ç¡¼¥¿¥ª¥Ö¥¸¥§¥¯¥È¤Ë»ý¤Äµ¡Ç½(Re: CAD¤Î¥¯¥é¥¹¹½Â¤)
¤¢¤¢¡¢Á°È¾¤Ï¥´¥ß¤Ç¤¹¤¬½¤Àµ¤»¤º¤ËÁ÷¤Ã¤Æ¤·¤Þ¤¤¤Þ¤¹.
In article <9909020952.AA09624@xxxxxxxxxx>
Kazuya Maebashi wrote:
>>¤Þ¤º¡¢LineRunTimeForDrawerÅù¤òShape¤Î¥µ¥Ö¥¯¥é¥¹¤¿¤Á¤Ë´ØÏ¢ÉÕ¤±¤ë½è
>>Íý¤¬É¬Íפʤ櫓¤Ç¤¹¤¬¡¢¤³¤ì¤ò¹Ô¤¦¤Ë¤Ï·ë¶É¡¢
>>if (shape instanceof Line) {
>> shape.runtime = new LineRunTimeForDrawer();
>>} else if () {
>>}
>>¤ß¤¿¤¤¤Ê»ö¤¬É¬ÍפˤʤäƤ·¤Þ¤¤¤Þ¤¹.
>
>¤¨¤¨¤È¡¢Line¤Î¥³¥ó¥¹¥È¥é¥¯¥¿¤Ç¤¯¤Ã¤Ä¤±¤ì¤Ð¤¤¤¤¤«¤È»×¤Ã¤Æ¤¿¤ó
>¤Ç¤¹¤¬(Java¤Î¥Ç¥·¥ê¥¢¥é¥¤¥¶¤Ã¤Æ¥³¥ó¥¹¥È¥é¥¯¥¿¸Æ¤Ö¤ó¤À¤Ã¤±)¡¢
>¤è¤¯¹Í¤¨¤¿¤é¡¢Line¤Î¥³¥ó¥¹¥È¥é¥¯¥¿¤¬¡Ödraw()¤¹¤ë¥¢¥×¥ê¥±¡¼¥·¥ç
>¥ó¡×¤Ë°Í¸¤·¤Æ¤Ï¤¤¤±¤Ê¤¤¤Ç¤¹¤Í¡£
>
>¤Ç¤â¡¢¥ª¥Ö¥¸¥§¥¯¥È¤ò¹½ÃÛ¤¹¤ë¥¢¥×¥ê¤Ë¤è¤Ã¤Æ¡¢¤¯¤Ã¤Ä¤±¤ë¥ª¥Ö¥¸¥§
>¥¯¥È¤òÊѤ¨¤ë¤³¤È¤°¤é¤¤¤Ï¡¢¼ê¤¬¤¢¤ë¤È»×¤¦¤ó¤Ç¤¹¤±¤ì¤É¤â¡£¤½¤ì
>¤³¤½ShapeRunTime¤ÎÀ¸À®¥¤¥ó¥¿¥Õ¥§¡¼¥¹¤ò¥°¥í¡¼¥Ð¥ëÊÑ¿ôÅϤ·¤Ë¤·
>¤Æ¤Ç¤â¡£
Shape¥µ¥Ö¥¯¥é¥¹¤Ëfactory method¤òÍѰդ¹¤ë°Ê³°¤ÎÊýË¡¤Ç¡¢Shape¥µ¥Ö¥¯¥é
¥¹·²¤È°ìÂаì¤ËÂбþ¤¹¤ë¥¢¥×¥ê¥±¡¼¥·¥ç¥óÆÈ¼«¥¯¥é¥¹(ShapeRunTime¥µ¥Ö¥¯
¥é¥¹¤Î¥µ¥Ö¥¯¥é¥¹·²)¤òÀ¸À®¤¹¤ë¤ï¤±¤Ç¤¹¤è¤Í.instanceof¤ò»È¤ï¤º¤Ë²Äǽ¤Ç
¤·¤ç¤¦¤«?
Class#forName()¤Ç¤â»È¤¨¤Ð½ÐÍè¤ë¤Ç¤·¤ç¤¦¤±¤ì¤É.
>>¤Ç¡¢Shape¤Ë¥á¥ó¥Ð¤ò»ý¤Ä·Á¤À¤È¤½¤Î¸åDrawer¤ò»È¤¦»þ¤Ë¡¢
>>
>>(LineRunTimeForDrawer)(shape.runtime).draw();
>>
>>¤Ê¤ó¤Æ¤·¤Ê¤¤¤È¤¤¤±¤Ê¤¤¤Î¤Ç¡¢¤½¤ì¤Ê¤é¡¢
>
>¥À¥¦¥ó¥¥ã¥¹¥È¤Ï¡¢(RunTimeForDrawer)shape.runtime
>¤Þ¤Ç¤Ç¤¤¤¤¤È»×¤¦¤Î¤Ç¤¹¤¬¡¢Ç¡²¿?
¸íµ¤Ç¤·¤¿.¤¹¤ß¤Þ¤»¤ó.¤½¤Î¤È¤ª¤ê¤Ç¤¹.
>¤³¤ì¤Ê¤é¡¢¾¯¤Ê¤¯¤È¤âLine¤«Rect¤«¤È¤¤¤¦ else if ¤Î»³¤Ï½ñ¤«¤Ê
>¤¯¤Æ¤¹¤ß¤Þ¤¹¡£
¸Æ¤Ó½Ð¤·²Õ½ê¤Ï¡¢(ShapeRunTimeForDrawer)(shape.runtime).draw();°ì¹Ô¤Ç
¤è¤¤¤Ç¤¹¤¬¡¢shape.runtime¤ËÀßÄꤹ¤ë²Õ½ê¤ÏÁ°µ¤ÎinstanceofÅù¤Ë¤è¤ë¥¯
¥é¥¹¤Î·èÄê½èÍý¤¬É¬Íפˤʤê¤Þ¤¹.
>>ÍøÍѼԤϡÖShapeRunTime¤È¤¤¤¦¥¯¥é¥¹¤ò¥µ¥Ö¥¯¥é¥¹²½¤·¤Æ¡¢ÆÈ¼«¤Î¼ÂÁõ
>>¤ò½ñ¤¡¢Shape¤Ë¼Â¹Ô»þ¤Ë¼«Ê¬¤ÇÀßÄꤷ¤Æ¡¢narrowing cast¤·¤Æµ¡Ç½¤ò¸Æ
>>¤Ó½Ð¤¹¡×¤È¤¤¤¦Ìó«¤ò¼é¤ì¤ë¤Î¤Ç¤·¤ç¤¦¤«?
>
>¥µ¥Ö¥¯¥é¥¹¤òÄêµÁ¤·¤Æ¡¢Shape¤Ë¤¯¤Ã¤Ä¤±¤ë½ê¤Þ¤Ç¤Á¤ã¤ó¤È¤ä¤ì¤Ð¡¢
>¥À¥¦¥ó¥¥ã¥¹¥È¤Ç¥Ø¥Þ¤¹¤ì¤ÐÎã³°¤Ç¥³¥±¤ë¤Î¤Ç¡¢¼é¤é¤¶¤ë¤òÆÀ¤Ê¤¤
>¤È¤¤¤¦¤«(^^;
¤¯¤Ã¤Ä¤±¤ëºî¶È¤Ï¡¢draw(Shape);¤È¤¤¤¦¥á¥½¥Ã¥É¤òºî¤ë¤Î¤ÈÆ±ÄøÅ٤μê´Ö¤Ç
¤¹.¤½¤ì¤ò³Æ¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤¬¼é¤é¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¤¤Î¤Ç¡¢¡ÖƱ¤¸¤è¤¦¤Ê
¤â¤Î¡×¤È¾Î¤·¤Þ¤·¤¿.(Â礷¤ÆÊѤï¤é¤Ê¤¤°Ì¤¬ÂÅÅö¤«¤Ê)
>>Ê̤δÑÅÀ¤«¤é¸«¤Æ¡¢ShapeRunTime¤Ë¤Ï¼Â¹Ô»þ¤Î¤ß»È¤¨¤ë´ðËܵ¡Ç½¤â»ý¤¿
>>¤»¤ë¤³¤È¤¬¹Í¤¨¤é¤ì¤Þ¤¹¤è¤Í.
>>¤½¤ì¤ÈÆ±ÄøÅÙ¤Ëdraw()¥¤¥ó¥¿¡¼¥Õ¥§¥¤¥¹¤ÎɬÍ×À¤¬¤¢¤ì¤Ð¡¢
>>ShapeRunTime#draw()¤È¤¤¤¦(Ãê¾Ý)¥¤¥ó¥¿¡¼¥Õ¥§¥¤¥¹¤â½ñ¤¤¤Æ¤ª¤±¤Ð¡¢
>>narrowing cast̵¤·¤Ç¸Æ¤Ó½Ð¤»¤Þ¤¹.
>
>¤³¤ì¤Ï¡¢¤½¤¦¤À¤È»×¤¤¤Þ¤¹¡£¤½¤·¤Æ¡¢³Æ¥¢¥×¥ê¤ÎÆÃ²½¤·¤¿¤â¤Î¤À¤±¡¢
>ShapeRunTime¤Î¥µ¥Ö¥¯¥é¥¹¤Ë¼ÂÁõ¤¹¤ì¤Ð¤¤¤¤¤ï¤±¤Ç¤¹¡£
¤½¤¦¤Ê¤ë¤È¡¢º£Å٤ϻä¤Îµó¤²¤¿¼ê¤Ë¶á¤Å¤¯¤Î¤Ç¤¹¤¬¡¢»ä¤Ï¥¢¥×¥ê¥±¡¼¥·¥ç¥ó
¤ËÆÃ²½¤·¤¿¤â¤Î¤¬¤Ê¤¤¾ì¹ç¤Ï¡¢Á°µ¤Î¼ê´Ö¤¬Á´¤¯ÉÔÍפȤ¤¤¦½ê¤ò½Å»ë¤·¤Æ¤¤
¤Þ¤¹.
¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤ËÆÃ²½¤·¤¿½èÍý¤òÍѰդ¹¤ë¾ì¹ç¤Ï¡¢ShapeRunTime¤Î¥µ¥Ö¥¯
¥é¥¹¤òÍѰդ¹¤ë¥Ñ¥¿¡¼¥ó¤Ç¤âspeciallyFunction(Shape);¤ß¤¿¤¤¤Ê¤Î¤ò¥¢¥×
¥ê¥±¡¼¥·¥ç¥óÆâ¤Ë»ý¤¿¤»¤ë¤Î¤âÂ纹̵¤¤¤È¹Í¤¨¤¿¤¿¤á¤Ç¤¹.
>>¤¦¡¼¤ó¤È¤³¤Î¾ì¹ç¤ÎShapeFunction¼ÂÁõ¥¯¥é¥¹¤Ï¡¢Shape¥µ¥Ö¥¯¥é¥¹¤ÈƱ
>>ÍͤËÊ£¿ô¤Î¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤«¤é»È¤ï¤ì¤ë¥¯¥é¥¹¥é¥¤¥Ö¥é¥ê¤Î°ÌÃÖÉÕ¤±
>>¤Ç¤¹¤Í.
>
>λ²ò¤·¤Þ¤·¤¿¡£
¤³¤ÎÊդλëÅÀ¤Î°ã¤¤¤¬¤¢¤Ã¤¿¤Î¤Ç°Õ¸«¤¬°ã¤Ã¤¿¤À¤±¤È»×¤¤¤Þ¤¹¤±¤É¤Í.
>> ¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤ËÆÈ¼«¤Î¼ÂÁõ¤Ï...¤ÎÉôʬ(¾å¤Ë°úÍѤ·¤Þ¤·¤¿)
>>¤Ë¤â¤¢¤ë¤è¤¦¤ËShapeFunction¤È¤ÏÆÈΩ¤·¤Æºî¤é¤¶¤ë¤òÆÀ¤Ê¤¤¤È»×¤¤¤Þ¤¹.
>
>ÀèÄø¤ÎotherYYYY()¤Ç¤¹¤Í¡£¤Ç¡¢Line¤äRect¤òinstanceof¤¹¤ëelse
>if ¤Î»³¤Ë¤Ä¤¤¤Æ¤Ï¤¢¤¤é¤á¤ë¡¢¤È¤¤¤¦¤³¤È¤Ç¤¹¤«¡£
>
>¤½¤¦¤¹¤ë¤È¡¢Shape¤Ëruntime¤ò»ý¤ÄɬÍפâ¤Ê¤¯¤Ê¤ë¤Î¤Ç¤¹¤¬...
¤½¤¦¤Ç¤¹.»ä¤Ï»ý¤ÄɬÍפâ¤Ê¤¤¤È»×¤¤¤Þ¤·¤¿.
>¤Ç¤â¡¢¤É¤Ã¤Á¤ß¤Á¡¢transient¤Ê¥á¥ó¥Ð¤Ï²¿¤ä¤«¤ä¤ÇÍפꤽ¤¦¤Êµ¤
>¤¬¤·¤Þ¤¹¡£¤¿¤È¤¨¤Ð¡¢Windows¤Ê¤é¡¢CPen¤Ê¤ó¤Æ¥ª¥Ö¥¸¥§¥¯¥È¤¬¤¢¤Ã
>¤Æ¡¢¤³¤¤¤Ä¤ÇÉÁ²è°À¤ò»ØÄꤹ¤ë¤ï¤±¤Ç¤¹¤¬¡¢¼ÂÁõ¤Ë¤è¤Ã¤Æ¤Ï¡¢¼Â
>¹Ô»þ¤Ë¤Ï³ÆShape¤ËCPen¤òÊÝ»ý¤µ¤»¤È¤¤¿¤¤¤È»×¤¦¤«¤âÃΤì¤Þ¤»¤ó¡£
¤³¤Î¼ê¤ÎÉáÃʤϻȤï¤Ê¤¤¤¬°ì»þŪ¤Ë½¸¹ç¤Î³ÆÍ×ÁǤ˻ý¤¿¤»¤¿¤¤¾ðÊ󤬤¢¤ë¤È
¤¤Ï¡¢wrapper¤ò»È¤¦¤Û¤¦¤¬Ä¾´¶Åª¤Êµ¤¤¬¤·¤Þ¤¹.
(¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤Ë¤è¤Ã¤ÆÊѤï¤ë¤Î¤Ç¤¢¤ì¤Ð¤Ê¤ª¤µ¤é¤Ç¤¹)
# Êñ´Þ´Ø·¸¤¬µÕ¤Ã¤Æ¹Í¤¨Êý¤Ç¤¹¤Í.¤³¤Î¥±¡¼¥¹¤Ç¤É¤Ã¤Á¤ÎÊý¤¬¤¤¤¤¤«¤Ï¤Þ¤À
# ¸·Ì©¤Ë¤ÏȽÃǤǤ¤Æ¤¤¤Þ¤»¤ó¤¬.
>Shape¤Ï¤¿¤¤¤Æ¤¤ÂçÎ̤ˤ¢¤ë¤Ç¤·¤ç¤¦¤·¡¢Shape¤Î¼Â¹Ô»þ°À¤Ï
>Shape¤´¤È¤Ë»ý¤Ã¤Æ¤Ê¤¤¤È´ÉÍý¤¬ÂçÊѤǤ¹¤·...
>
>Shape¤¬¶ñÂÎŪ¤ËLine¤«Rect¤«¤Ã¤Æ¤³¤È¤Ë¤è¤êưºî¤òÊѤ¨¤è¤¦¡¢¤Ê
>¤ó¤Æ¤³¤È¤â¹Í¤¨¤ë¤È...
¥ê¥Õ¥ì¥¯¥·¥ç¥ó¤ò»È¤ï¤Ê¤¤¸Â¤ê¤Ï¡¢¡¢¡¢¤¢¡¢¡¢¡¢¤³¤³¤Þ¤Ç½ñ¤¤¤Æ...
Abstract Factory¥Ñ¥¿¡¼¥ó»È¤¨¤Ð½ÐÍè¤Æ¤·¤Þ¤¦...º£¤´¤íµ¤ÉÕ¤¤Þ¤·¤¿.
¤³¤³¤Þ¤Ç¤Îµ½Ò¤Ï¸í²ò¤Ë´ð¤Å¤¯¥´¥ß¤Ç¤¹.
***********************
interface ShapeRunTimeFactory {
ShapeRunTime createLineShapeRunTime();
ShapeRunTime createRectShapeRunTime();
ShapeRunTime createCircleShapeRunTime();
:
}
Drawerµ¡Ç½¤ò»È¤¤¤¿¤¤¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤Ï¡¢
interface Drawer {
void draw();
}
interface LineShapeRunTimeForDrawer extends
LineShapeRunTime, Drawer {}
:
# ¥¯¥é¥¹¤Ç¤â¹Ô¤±¤ë¤±¤Éinterface¤ÎÊý¤¬ÈÆÍÑŪ¤Ë»È¤¨¤Þ¤¹¤Í.
¤Ç¡¢³Æ¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤Ï(³ÆDrawer¤òÊÖ¤¹)ShapeRunTimeFactory¤Î¥µ¥Ö¥¯
¥é¥¹¤òShape¤ËÍ¿¤¨¤Æ¡¢Shape¥µ¥Ö¥¯¥é¥¹¤Ï¼«Ê¬¤Ë±þ¤¸¤¿create¥á¥½¥Ã¥É¤ò¸Æ
¤Ù¤Ð¤¤¤¤¤È.
interface Shape {
ShapeRunTime getShapeRunTime(ShapeRunTimeFactory factory);
//void setRunTimeFactory(ShapeRunTimeFactory factory); ¢¨
//ShapeRunTime getShapeRunTime(); ¢¨
:
}
¤ª¤ª¡¢´°àú¤«¤â.Shape¤Î¼ÂÁõ¥¯¥é¥¹¤Ç¤ÏShapeRunTime¥ª¥Ö¥¸¥§¥¯¥È¤ò¥¥ã¥Ã
¥·¥å¤·¤Æ¤â¤¤¤¤¤Ç¤¹¤Í(¤½¤Î¾ì¹ç¢¨¤Î¤è¤¦¤Ê·Á¤ÎÊý¤¬Îɤµ¤½¤¦).
¿·¤·¤¤Shape¥µ¥Ö¥¯¥é¥¹¤¬½ÐÍè¤ì¤ÐShapeRunTimeFactory¤È¤½¤Î¼ÂÁõ¥¯¥é¥¹¤Ë
¥¤¥ó¥¿¡¼¥Õ¥§¥¤¥¹Äɲä·¤ÆgetShapeRunTime()¤Ç¤½¤Î¥á¥½¥Ã¥É¤ò¸Æ¤Ù¤ÐOK.
# ¼«Æ°¤Ç¥³¥ó¥Ñ¥¤¥ë¤·¤Æ¤¯¤ì¤Ê¤¤¤Î¤ÇÌÀ¼¨Åª¤Ë¥³¥ó¥Ñ¥¤¥ë¤·¤Ê¤¤¤È½¤ÀµËº¤ì
# ¤Ëµ¤ÉÕ¤«¤Ê¤¤²ÄǽÀ¤Ï¤¢¤ê¤Þ¤¹¤¬.
¤â¤Á¤í¤ó¥¢¥×¥ê¥±¡¼¥·¥ç¥óËè¤Ë[newType]ShapeRunTimeFor[Function]¤Î¥¯¥é
¥¹¤ÎÄɲäâɬÍפǤ¹¤¬¡¢¤³¤ì¤Ï¤É¤ó¤ÊÊýË¡¤ò¼è¤Ã¤Æ¤â¼ê´Ö¤ÏƱ¤¸¤Ê¤Î¤Ç¤è¤·.
¿·¤·¤¤µ¡Ç½¤ÎÄɲä˴ؤ·¤Æ¤Ï¤â¤¦²¿¤ÎÌäÂê¤â̵¤¤¤Ç¤¹¤Í.
¸å¤Ï¡¢Æ±¤¸µ¡Ç½¤Î¥¤¥ó¥¿¡¼¥Õ¥§¥¤¥¹Êѹ¹¤Ê¤É¤Î¾ì¹ç¤Î½¤Àµ¤Î¼ê´Ö¤Ç¤¹¤¬¡¢¤³
¤ì¤Ï°ì¤Ä¤Î¥á¥½¥Ã¥É¤Ë¼ÂÁõ¤¹¤ë¤è¤ê¤ÏÌñ²ð¤Ë¤Ê¤ê¤Þ¤¹¤¬¡¢³Æ¥¯¥é¥¹
(Î㤨¤ÐDrawer¼ÂÁõ¥¯¥é¥¹)¤òƱ¤¸¥½¡¼¥¹¥Õ¥¡¥¤¥ë¤Ë½ñ¤¤¤¿¤ê(¥¢¥×¥ê¥±¡¼¥·
¥ç¥ó¤ÈƱ°ì¥Ñ¥Ã¥±¡¼¥¸¤Ê¤é²Äǽ)¡¢Æ±¤¸package¤Ë°¤µ¤»¤ë¤³¤È¤Ç¤½¤ó¤Ê¤ËÂç
ÊѤ¸¤ã¤Ê¤¯¤Ê¤ë¤È»×¤¤¤Þ¤¹.
>¤³¤½ShapeRunTime¤ÎÀ¸À®¥¤¥ó¥¿¥Õ¥§¡¼¥¹¤ò¥°¥í¡¼¥Ð¥ëÊÑ¿ôÅϤ·¤Ë¤·
>¤Æ¤Ç¤â¡£
¤Ã¤Æ½ñ¤¤¤Æ¤¯¤À¤µ¤Ã¤Æ¤¿¤Î¤Ë²¿¤ä¤Ã¤Æ¤ó¤Ç¤·¤ç..¤ª¤Ð¤«¤Ç¤·¤¿.¤¹¤ß¤Þ¤»¤ó.
¡ÖShape¤Î¥á¥ó¥Ð¤È¤·¤ÆRunTime¤ò»ý¤Á¡¢³Æ¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤¬ÀßÄꤹ¤ë¡×¤È
¤¤¤¦°Õ¸«¤Ë¸Ç¼¹¤·¤Æ¡¢º®Í𤷤Ƥ¤¤¿¤è¤¦¤Ç¤¹.
¤³¤ì¤Ç¤Û¤È¤ó¤ÉǼÆÀ¤Ç¤¤Þ¤·¤¿.
Á°È¾¤ÎŤ¤¥´¥ß¤òÆÉ¤Þ¤»¤Æ¤·¤Þ¤Ã¤Æ¿½¤·Ìõ¤Ê¤¤¤Î¤Ç¤¹¤¬¡¢¤¦¤Þ¤¯ÊÔ½¸¤¹¤ëµ¤
ÎϤ¬Ìµ¤«¤Ã¤¿¤Î¤Ç¤¹.¤¹¤ß¤Þ¤»¤ó.
¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡
ÌÚ²¼ ¿®¡÷¥¤¥Ç¥¢
¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡