[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[jfriends] JAVA¥ª¥Ö¥¸¥§¥¯¥ÈÀß·×ÂèÆó¾Ï¤ÎḚ̂Æ
¤¦¡¼¤ó¤«¤Ê¤êÍý²ò¤·¤Ë¤¯¤¯¤Ê¤Ã¤¿¤È¤Ï»×¤¤¤Þ¤¹¤¬¡¢ÆÉ½ñ²ñ¤Î¤ªÏ䷤ˤ¢¤Ã¤¿ÊÌ
¹½À®°Æ¤òÅꤲ¤Þ¤¹.
¤¤¤í¤¤¤í¾Êά¤·¤Æ¤Þ¤¹.
»ÅÍͤ˴ؤ·¤Æ¤Ï¡ÖJAVA¥ª¥Ö¥¸¥§¥¯¥ÈÀ߷ספò¸«¤Ê¤¤¤È¤ï¤«¤é¤Ê¤¤¤È¤Ï»×¤¤¤Þ¤¹
¤¬¡¢Æ°Åª¤ËPassenger/Agent/AgentPassenger¤òÀÚ¤êÂØ¤¨¤é¤ì¤Æ¡¢¤½¤ì¤é¤òPerson/
PersonRole¤È¤·¤Æ°·¤¨¤Æ¡¢¿·¤¿¤ÊÌò³ä¤ÎÄɲûþ¤Ë´û¸¥¯¥é¥¹¤Î½ñ¤´¹¤¨¤¬¤¤¤é
¤Ê¤¤¤â¤Î¤Ç¤¹.
(¿·¤·¤¤Ìò³ä¤Îinterface¤È¤½¤Î¼ÂÁõclass¤ò²Ã¤¨¤ì¤ÐÎɤ¤)
ÆÉ½ñ²ñ¤Ç¤ÏDecorator¥Ñ¥¿¡¼¥ó¤È¸À¤Ã¤Æ¤·¤Þ¤Ã¤Æ¤Þ¤·¤¿¤¬¡¢Decorator¥Ñ¥¿¡¼¥ó
¤È¤ÏÌÜŪ¤¬°Û¤Ê¤Ã¤Æ¤¤¤ë¤Î¤Ç¥Ç¥¶¥¤¥ó¥Ñ¥¿¡¼¥ó¤ÎDecorator¥Ñ¥¿¡¼¥ó¤È¤Ï°ã¤¤
¤Þ¤¹.
¥Æ¥¹¥È¤·¤Æ¤Ê¤¤¤Î¤Ç´°Á´¤¸¤ã¤Ê¤¤¤«¤â¤·¤ì¤Þ¤»¤ó¤¬¡¢Ê¬¤«¤ê¤Ë¤¯¤¤¤È¤³¤í¤Ï°ì
±þÀâÌÀ½ÐÍè¤ë¤È»×¤¤¤Þ¤¹¤Î¤Ç¡¢¤´»ØÅ¦¤¯¤À¤µ¤¤.
¼«Ê¬¤Ç¤ÏPeter¤µ¤ó¤ÎÀ߷פè¤êÎɤ¤¤È»×¤Ã¤Æ¤Þ¤¹¡¥
Peter¤µ¤ó¤ÎÀ߷פè¤ê°¤¤¤È¤³¤í¤Ï¡¢Person¤Îµ¡Ç½³ÈÄ¥»þ¤ËPersonDecorater¤â
½ñ¤´¹¤¨¤Ê¤¤¤È¤¤¤±¤Ê¤¤¤È¤³¤í¤Ç¤¹¤¬¡¢¤½¤ì°Ê¾å¤ËDecorator¥µ¥Ö¥¯¥é¥¹Ã£¤ò
Person¤È¤·¤Æ°·¤¨¤ë¤³¤È¤ÎÊý¤¬Â礤¤¤È»×¤Ã¤Æ¤¤¤Þ¤¹.
class Address {
:
}
// Ìò³ä¤ÎÄêµÁÉôʬ
interface Person {
String getName();
Address getAddress();
}
interface PersonRole extends Person {
int getNumber();
}
interface Agent extends PersonRole {
String getPassword();
boolean isAuthorized();
}
interface Passenger extends PersonRole {
int REGULAR = 1;
int GOLD = 2;
int getType();
}
interface AgentPassenger extends Agent, Passenger {
}
// Person¤ÎDecorator
// (¥Ç¥¶¥¤¥ó¥Ñ¥¿¡¼¥ó¤ÎDecorator¤È¤Ï¤Á¤ç¤Ã¤È°Ọ̃Ū¤Ë°ã¤¦¤Ê...)
// # ¤Ä¤Þ¤ê¡¢¥Ç¥¶¥¤¥ó¥Ñ¥¿¡¼¥ó¤ÎÊý¤Ïinterface¤Ë¤¢¤ë¥á¥½¥Ã¥É¤Î³ÈÄ¥
// # ¤À¤±¤É¡¢¤³¤Ã¤Á¤Ï¿·¤·¤¤¥á¥½¥Ã¥É¤ÎÄɲäÀ¤«¤é.
abstract class PersonDecorator implements PersonRole {
// Person¤òÊÝ»ý¤·¤¿¤¤¤È¤³¤í¤À¤¬¡¢Decorator¤Ï°À¤ò»ý¤Æ¤Ê¤¤¤Î¤Ç
// PersonRole¤òÊÝ»ý¤¹¤ë(=ConcretePersonRole¤òÄêµÁ)
protected PersonRole personRole_;
protected PersonDecorator(PersonRole personRole) {
// Component¤òÊÝ»ý
personRole_ = personRole;
}
public String getName() {
return personRole_.getName();
}
public Address getAddress() {
return personRole_.getAddress();
}
public int getNumber() {
return personRole_.getNumber();
}
}
class ConcretePerson implements Person {
// ŬÅö¤Ê¥Ñ¥é¥á¥¿¤ò¼è¤ë¥³¥ó¥¹¥È¥é¥¯¥¿¤ò¤Ä¤±¤Æ¤â¤¤¤¤
private String name_;
public void setName(String name) {
name_ = name;
}
public String getName() {
return name_;
}
private Address address_;
public void setAddress(Address address) {
address_ = address;
}
public Address getAddress() {
return address_;
}
}
class ConcretePersonRole extends ConcretePerson implements PersonRole {
private int number_;
public int getNumber() {
return number_;
}
}
class ConcreteAgent extends PersonDecorator implements Agent {
ConcreteAgent(PersonRole personRole) {
super(personRole);
}
private String password_;
public String getPassword() {
return password_;
}
private boolean authorized_;
public boolean isAuthorized() {
return authorized_;
}
}
class ConcretePassenger extends PersonDecorator implements Passenger {
ConcretePassenger(PersonRole personRole) {
super(personRole);
}
private int type_;
public int getType() {
return type_;
}
}
// ConcretePassenger¤È¤É¤Ã¤Á¤òextends¤¹¤ë¤«¤Ï¼ÂÁõÉéô¤òÅ·Çé¤Ë·è¤á¤ë
class ConcreteAgentPassenger extends ConcreteAgent
implements AgentPassenger {
private Passenger passenger_;
ConcreteAgentPassenger(PersonRole personRole) {
super(personRole);
// ConcretePassenger¥ª¥Ö¥¸¥§¥¯¥È¤âºî¤Ã¤È¤¯
// PersonDecorator¤Ë°À¤ò»ý¤¿¤»¤Ê¤¤¤è¤¦¤Ë¤¹¤ë¤Î¤Ï
// ¤³¤¦¤¤¤¦»È¤¤Êý¤Î»þ¤Ë°À¤¬½ÅÊ£¤¹¤ë¤«¤é.
passenger_ = new ConcretePassenger(personRole);
}
// ¤³¤ÎÊÕ¤¬¥ß¥½¤Ç¤¹¤«¤Í
public int getType() {
return passenger_.getType();
}
}
--
Shin¡÷¥¤¥Ç¥¢