E D R , A S I H C RSS

Pluggable Selector

Pluggable Selector

ฐ€žฅ „‹•˜ฒŒ Pluggable Behavior๋ฅผ ตฌ˜„•˜๋Š” ๋ฐฉ๋ฒ•€ ‹–‰๋  –‰๋™„  €žฅ•ด๋†“๋Š” ฒƒด๋‹ค. ๋จผ € ฒƒ˜ ๋ฐ˜๋ก€, ฆ‰ „œ๋ธŒด๋ž˜‹•œฒƒ„ ๋ณดž.
~cpp 
class ListPane
{
public:
	Type printElement(Object& anObject) {
		return anObject.printString();
	}
};

class DollarListPane : public ListPane
{
public:
	Type printElement(Object& anObject) {
		return anObject.asDollarFormatString();
	}
};

class DiscriptionListPane : public ListPane
{
public:
	Type printElement(Object& anObject) {
		return anObject.desription();
	}
};

ด๋Ÿฐ‹œผ๋กœ •˜๋‚˜˜ ๋ฉ”†Œ๋“œ๋งŒ „† ˜ค๋ฒ„ด๋”ฉ•œ‹ค๋ฉด „œ๋ธŒด๋ž˜Šค๋“ค˜ ฐ€˜ฐ€ —†„ฒƒ ฐ™๋‹ค. ‰ฌšด •ฒฐฑ…€ ListPane ŠคŠค๋กœ๋ฅผ ข€ ๋” œ —ฐ•˜ฒŒ ๋งŒ๋“œ๋Š” ฒƒด๋‹ค. ๋‹ค๋ฅธ Šค„Šค๋“คด ๋‹ค๋ฅธ ๋ฉ”„ง€๋ฅผ ๋ณด๋‚ดฒŒ •˜๋Š” ฒƒด๋‹ค.
~cpp 
class ListPane
{
private:
	void (ListPane::*printMessage)();
public:
	Type printElement(Object& anObject) {
		return anObject.perform(printMessage);
	}
	void initialize() {
		printMessage = printString;	// printString€ –ด๋”˜ฐ€— ตฌ˜„๋˜–ด žˆ๋‹ค.
	}
};
ฐ€๋…„ฑ : ธ๋ƒฅ „œ๋ธŒด๋ž˜‹•œฒƒ๋ณด๋‹ค ๋–จ–ด„‹ค.
œ —ฐ„ฑ : P.S๋Š” ˆ˜‹  ฒด— ตฌ˜„๋˜–ด••œ‹ค.
™•žฅ„ฑ : •œ ˜ค๋ธŒ Šธ๋งˆ๋‹œ๋Œ€ ๋‘๋ฒˆนŒง€๋งŒ “ฐž. ๋” ๋งŽ“ฐ๋ฉด ”„๋กœธ๋žจ˜ ˜๋„ฐ€ ๋ „‹ค. ๋” ๋งŽ“ฐ  ‹œผ๋ฉด State Object๋ฅผ “ฐ๋Š” ๋ฒ•žˆ๋‹ค.

‹–‰๋  selector๋ฅผ ฐ€ง€๋Š” ๋ณ€ˆ˜๋ฅผ ถ”ฐ€•œ‹ค. ด๋ฆ„ ๋’ค— Message๋ฅผ ๋ง๋ถ™ธ๋‹ค. selector๋ฅผ ‹–‰•˜ธฐ ‰ฝฒŒ •ฃผ๋Š” Composed Method๋ฅผ ๋งŒ๋“ ‹ค.

˜ˆ๋ฅผ ๋“ค–ด, –ด๋–ค ๋น„ฅฌ–ผ•œ ปดฌ๋„ŒŠธ๋ฅผ ๋‹ค๋ฅธ ฒƒ˜ ƒ๋Œ€ ธ ๋ถ€๋ถ„— œ„˜‹œ‚ค  ‹ถ๋‹ค๋ฉด, ƒ๋Œ€ œ„˜๋ฅผ ๋งŒ๋“ค–ดฃผ๋Š” Pluggable Selector๋ฅผ ‚ฌšฉ•  ˆ˜ žˆ๋‹ค.(???)
~cpp 
class RelativePoint
{
public:
	static RelativePoint* centered(Figure& aFigure) {
		RelativePonit* rp = new RelativePoint;
		rp->setFigurenMessage(aFigure, center);		
	}
	void setFigurenMessage(Figure& aFigure, int aSymbol()) {
		figure = aFigure;
		locationMessage = aSymbol;
	}
};
 œ ผ๋ฐ˜ Point˜๋Ÿผ ‚ฌšฉ•  ˆ˜ žˆ๋‹ค.
~cpp 
Point RelativePoint::asPoint()
{
	return figure.perform(locationMessage);
}

Point RelativePoint::x()
{
	return asPoint().x();
}
ด๋Ÿฐ ‹œผ๋กœ •˜๋ฉด CenteredRelativePoint, TopLeftRelativePointฐ™€ „œ๋ธŒด๋ž˜Šค๋ฅผ ๋งŒ๋“ค •„š”ฐ€ —†๋‹ค. œ„—„œ center๋ผ๋Š” ๋ฉ”„ง€๋ฅผ ถ”ฐ€•œ ฒƒ˜๋Ÿผ, topLeft๋ฉ”„ง€๋ฅผ ถ”ฐ€๋งŒ •˜๋ฉด ๋˜๋Š” ฒƒด๋‹ค.

Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2021-02-07 05:24:00
Processing time 0.0171 sec