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.0105 sec