[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¡÷¥¤¥Ç¥¢