Strategy パターンと開放/閉鎖原則に見るデザインパターンの有用性

Embed Size (px)

Citation preview

Strategy/

codeArts

?

...

F1!

!

F1!

!

?

?

GoF (Gang of Four; ) 4GoF423Wikipedia

?

(GoF)Wikipedia

?

...

?

?()!

!

?

?

...

!

!

!

A!

AA!

ABOCCO!

ABOCCO!...BOCCO!...

A!BOCCO(...)!

BOCCO

(...)

/** * * @param nodePath {String} */function displayRecursive(nodePath) { console.log(nodePath);

// var stat = fs.statSync(nodePath);

if (stat.isDirectory()) { // // var children = fs.readdirSync(nodePath); children.forEach(function (child) { displayRecursive(path.join(nodePath, child)); }); }}

displayRecursive(process.argv[2]);

A

$ node a.js ./././a.js./hoge./hoge/hoge.txt./hoge/README.md

A!

A!BOCCO!BOCCO!!

B

B

B

BBOCCOBOCCO!!

B

BOCCO(A...)BOCCO(...)

B

/** * * @param nodePath {String} * @param options {Object} */function displayRecursive(nodePath, options) { var line = '';

if (options && options.lineNumber) { // line += options.lineNumber + ': '; options.lineNumber++; }

line += nodePath;

console.log(line);

// var stat = fs.statSync(nodePath);

if (stat.isDirectory()) { // // var children = fs.readdirSync(nodePath); children.forEach(function (child) { displayRecursive(path.join(nodePath, child), options); }); }}

B

displayRecursive(process.argv[2], { lineNumber: 1});

B

$ node a.js ./1: ./2: ./a.js3: ./hoge4: ./hoge/hoge.txt5: ./hoge/README.md

B

BBOCCO! !BOCCO!

B

(...)

C

C

CBOCCOCBOCCO!!

C

BOCCO!C!C?BOCCO!

C

BOCCO!C!

C

(...)

C

BBOCCO!BOCCO??

C

BB?BOCCO!

C

B!B!BOCCO...

C

(...)

C

BOCCOB...

C

BBBOCCO...BBOCCO...

C

BBB?BOCCO...B...BOCCO...

C

BOCCO(...)

C

BOCCOBOCCOBBOK!B

C

ABOCCOBOCCOBOCCO(A...)

C

AA?BOCCO(...)BOCCO...

C

A...BOCCOB?A!!

...

...

...

...!

0

...

BOCCO

...

EBOCCO?BOCCOA...E!BOCCO...

...

EA??BOCCOC...E?BOCCO...

...

ABOCCOC

...

(BOCCO...)

...

BOCCO(...)

...

...

(BOCCO...)

...

F...BOCCO!()BOCCO...

...

F?BOCCO!F??BOCCO...

...

BOCCO()

...

AA?CF?

...

BOCCO(...)

...

BOCCO

...

!

...!

()

!

!

B

/** * * @param nodePath {String} * @param optDisplay {Function} */function displayRecursive(nodePath, optDisplay) { var display = optDisplay || function (line) { console.log(line); }; display(nodePath);

// var stat = fs.statSync(nodePath);

if (stat.isDirectory()) { // // var children = fs.readdirSync(nodePath); children.forEach(function (child) { displayRecursive(path.join(nodePath, child), display); }); }}

/** * */function makeLineNumber () { var lineNumber = 1; return function (nodePath) { console.log(lineNumber + ': ' + nodePath); lineNumber++; };};

displayRecursive(makeLineNumber());

B!

F

!

BOCCO

!

/

/

!/ (Open-Closed Principle)!

/

/(Open-Closed Principle)(Open)

(Close)

/

...

...

/

...

/

?????

/

!

/

ABCD

!!!!!

/

ABCD

ABCD?...

/

ABCD

ABCD?...

/

ABCD

ABCD

/

ABCD

ABCD!!!!!

/

C...

/

!

/

/

...

/

!

/

!

/

ABCD

ABCD...

/

ABCD

ABCD

/

ABCD

ABCD?...

!

/

/!

/

?

?

?

http://www.amazon.co.jp/dp/4797311126/

?

http://www.amazon.co.jp/dp/4797347783

?

http://www.amazon.co.jp/dp/4621066048/

?

http://www.amazon.co.jp/dp/427405019X/

?

!

?

Java!

?

!!

...

?

?

...

?

?

B

?

(/)

?

...

?

?

!

?

?

!

?

...

...

...

/

!

/

...

!

!