jasu's blog
블로그 메뉴검색결과 리스트
Design Patterns에 해당되는 글 9건
- 2007.02.21 Iterator
- 2007.02.21 TemplateMethod
- 2007.02.21 Adapter
- 2007.02.21 Command
- 2007.02.21 Singleton
- 2007.02.21 Factory
- 2007.02.21 Decorator
- 2007.02.21 Observer
- 2007.02.21 StrategyPattern
글
Iterator
Programming/Design Patterns
2007. 2. 21. 11:09
1 class DinerMenu{
2 public static var MAX_ITEMS = 6;
3 private var numberOfItems = 0;
4 private var menuItems:Array;
5
6 public function DinerMenu(){
7 menuItems = new Array();
8
9 addItem("채식주의자용 BLT", "통밀 위에(식물성) 베이컨, 상추, 토마토를 얹은 메뉴", true, 2.99);
10 addItem("BLT", "통밀 위에 베이컨, 상추, 토마토를 얹은 메뉴", false, 2.99);
11 addItem("오늘의 스프", "감자 샐러드를 곁들인 오늘의 스프", false, 3.29);
12 addItem("핫도그", "사워크라우트, 갖은 양념, 양파, 치즈가 곁들여진 핫도그", false, 3.05);
13
14 }
15
16 public function addItem(name:String, description:String, vegetarian:Boolean, price:Number):Void{
17 var menuItem:MenuItem = new MenuItem(name, description, vegetarian, price);
18 if(numberOfItems >= MAX_ITEMS){
19 trace("죄송합니다. 메뉴가 꽉 찼습니다. 더이상 추가할 수 없습니다.");
20 }else{
21 menuItems[numberOfItems] = menuItem;
22 numberOfItems+=1;
23 }
24 }
25 /* public function getMenuItems():Array{
26 return menuItems;
27 }*/
28 public function createIterator():Iterator{
29 return new DinerMenuIterator(menuItems);
30 }
31
32 }
////////////////////////////////////////
1 class DinerMenuIterator implements Iterator{
2 private var items:Array;
3 private var position:Number;
4
5 public function DinerMenuIterator(items:Array){
6 this.items = items;
7 this.position = 0;
8 }
9 public function next():Object{
10 var menuItem:MenuItem = items[position];
11 position += 1;
12 return menuItem;
13 }
14 public function hasNext():Boolean{
15 if(position>= items.length || items[position] == null){
16 return false;
17 }else{
18 return true;
19 }
20 }
21 }
///////////////////////////////////////////
1 interface Iterator{
2 public function hasNext():Boolean;
3 public function next():Object;
4 }
///////////////////////////////////////////
1 class MenuItem{
2 private var name;
3 private var description:String;
4 private var vegetarian:Boolean;
5 private var price:Number;
6
7 public function MenuItem(name:String, description:String, vegetarian:Boolean, price:Number){
8 this.name = name;
9 this.description = description;
10 this.vegetarian = vegetarian;
11 this.price = price;
12 }
13 public function getName():String{
14 return name;
15 }
16 public function getDescription():String{
17 return description;
18 }
19 public function getPrice():Number{
20 return price;
21 }
22 public function isVegetarian():Boolean{
23 return vegetarian;
24 }
25 public function toString():String{
26 return name+" of MenuItem Object\n";
27 }
28 }
//////////////////////////////////////////
1 class PancakeHouseMenu{
2 private var menuItems:Array;
3
4 public function PancakeHouseMenu(){
5 menuItems = new Array();
6 addItem("K&B 팬케이크 세트", "스크램블드 에그와 포스트가 곁들여진 팬케이크", true, 2.99);
7 addItem("레귤러 팬케이크 세트", "달걀 후라이와 소시지가 곁들여진 팬케이크", false, 2.99);
8 addItem("블루베리 팬케이크", "신선한 블루베리와 블루베리 시럽으로 만든 팬케이크", true, 3.49);
9 addItem("와플", "와플, 취향에 따라 블루베리나 딸기를 얹을 수 있습니다.", true, 3,59);
10 }
11 public function addItem(name:String, description:String, vegetarian:Boolean, price:Number):Void{
12 var menuItem:MenuItem = new MenuItem(name, description, vegetarian, price);
13 menuItems.push(menuItem);
14 }
15 /* public function getMenuItems():Array{
16 return menuItems;
17 }*/
18 public function createIterator():Iterator{
19 return new PancakeIterator(menuItems);
20 }
21 }
/////////////////////////////////////////////
1 class PancakeIterator implements Iterator{
2 private var items:Array;
3 private var position:Number;
4
5 public function PancakeIterator(items:Array){
6 this.items = items;
7 this.position = 0;
8 }
9 public function next():Object{
10 var menuItem:MenuItem = items[position];
11 position += 1;
12 return menuItem;
13 }
14 public function hasNext():Boolean{
15 if(position>= items.length || items[position] == null){
16 return false;
17 }else{
18 return true;
19 }
20 }
21 }
////////////////////////////////////////////////
1 class Waitress{
2 private var pancakeHouseMenu:PancakeHouseMenu;
3 private var dinerMenu:DinerMenu;
4
5 public function Waitress(pancakeHouseMenu:PancakeHouseMenu, dinerMenu:DinerMenu){
6 this.pancakeHouseMenu = pancakeHouseMenu;
7 this.dinerMenu = dinerMenu;
8 }
9 public function printMenu():Void{
10 var pancakeIterator:Iterator = pancakeHouseMenu.createIterator();
11 var dinerIterator:Iterator = dinerMenu.createIterator();
12 trace("메뉴 ----- \n 아침 메뉴");
13 printMenuList(pancakeIterator);
14 trace("\n점심 메뉴");
15 printMenuList(dinerIterator);
16 }
17 private function printMenuList(iterator:Iterator):Void{
18 while(iterator.hasNext()){
19 var menuItem:MenuItem = MenuItem(iterator.next());
20 trace(menuItem.getName()+", ");
21 trace(menuItem.getPrice()+"--");
22 trace(menuItem.getDescription());
23 }
24
25 }
26 }
////////////////////////////////////////////
1 class MenuTestDrive{
2 public function MenuTestDrive(){
3 initialize();
4 }
5 private function initialize():Void{
6 var pancakeHouseMenu:PancakeHouseMenu = new PancakeHouseMenu();
7 var dinerMenu:DinerMenu = new DinerMenu();
8 var waitress:Waitress = new Waitress(pancakeHouseMenu, dinerMenu);
9 waitress.printMenu();
10 }
11 }
글
TemplateMethod
Programming/Design Patterns
2007. 2. 21. 11:09
1 class CaffeineBeverage{
2 public function prepareRecipe():Void{
3 boilWater();
4 brew();
5 pourInCup();
6 if(hook()){
7 addCondiments();
8 }
9 }
10 public function brew():Void{
11
12 }
13 public function addCondiments():Void{
14
15 }
16 public function boilWater():Void{
17 trace("물 끓이는 중");
18 }
19 public function pourInCup():Void{
20 trace("컵에 따르는 중");
21 }
22 public function hook():Boolean{
23 return true;
24 }
25 }
/////////////////////////////////////////////
1 class Coffee extends CaffeineBeverage{
2 public function brew():Void{
3 trace("필터로 커피를 우려내는 중");
4 }
5 public function addCondiments():Void{
6 trace("설탕과 커피를 추가하는 중");
7 }
8 public function hook():Boolean{
9 return false;
10 }
11 }
//////////////////////////////////////////////
1 class Tea extends CaffeineBeverage{
2 public function brew():Void{
3 trace("차를 우려내는 중");
4 }
5 public function addCondiments():Void{
6 trace("레몬을 추가하는 중");
7 }
8 }
//////////////////////////////////////////////
1 class TemplateTest{
2 public function TemplateTest(){
3 init();
4 }
5 private function init():Void{
6 var tea:CaffeineBeverage = new Tea();
7 var coffee:CaffeineBeverage = new Coffee();
8
9 trace("Tea Test..............");
10 tea.prepareRecipe();
11
12 trace("Coffee Test...........");
13 coffee.prepareRecipe();
14 }
15 }
2 public function prepareRecipe():Void{
3 boilWater();
4 brew();
5 pourInCup();
6 if(hook()){
7 addCondiments();
8 }
9 }
10 public function brew():Void{
11
12 }
13 public function addCondiments():Void{
14
15 }
16 public function boilWater():Void{
17 trace("물 끓이는 중");
18 }
19 public function pourInCup():Void{
20 trace("컵에 따르는 중");
21 }
22 public function hook():Boolean{
23 return true;
24 }
25 }
/////////////////////////////////////////////
1 class Coffee extends CaffeineBeverage{
2 public function brew():Void{
3 trace("필터로 커피를 우려내는 중");
4 }
5 public function addCondiments():Void{
6 trace("설탕과 커피를 추가하는 중");
7 }
8 public function hook():Boolean{
9 return false;
10 }
11 }
//////////////////////////////////////////////
1 class Tea extends CaffeineBeverage{
2 public function brew():Void{
3 trace("차를 우려내는 중");
4 }
5 public function addCondiments():Void{
6 trace("레몬을 추가하는 중");
7 }
8 }
//////////////////////////////////////////////
1 class TemplateTest{
2 public function TemplateTest(){
3 init();
4 }
5 private function init():Void{
6 var tea:CaffeineBeverage = new Tea();
7 var coffee:CaffeineBeverage = new Coffee();
8
9 trace("Tea Test..............");
10 tea.prepareRecipe();
11
12 trace("Coffee Test...........");
13 coffee.prepareRecipe();
14 }
15 }
글
Adapter
Programming/Design Patterns
2007. 2. 21. 11:08
1 interface Duck{
2 public function quack():Void;
3 public function fly():Void;
4 }
////////////////////////////////////
1 class MallardDuck implements Duck{
2 public function quack():Void{
3 trace("Quack");
4 }
5 public function fly():Void{
6 trace("I'm flying");
7 }
8 }
/////////////////////////////////////
1 interface Turkey{
2 public function gobble():Void;
3 public function fly():Void;
4 }
/////////////////////////////////////
class TurkeyAdapter implements Duck{
private var turkey:Turkey;
public function TurkeyAdapter(turkey:Turkey){
this.turkey = turkey;
}
public function quack():Void{
turkey.gobble();
}
public function fly():Void{
for(var i=0;i<5;i++){
turkey.fly();
}
}
}
//////////////////////////////////////
1 class WildTurkey implements Turkey{
2 public function gobble():Void{ 3 trace("Gobble gobble");
4 }
5 public function fly():Void{
6 trace("I'm flying a short distance");
7 }
8 }
//////////////////////////////////////
1 class DuckTestDrive{
2 public function DuckTestDrive(){
3 initialize();
4 }
5 public function initialize():Void{
6 var duck:MallardDuck = new MallardDuck();
7
8 var turkey:WildTurkey = new WildTurkey();
9 var turkeyAdapter:Duck = new TurkeyAdapter(turkey);
10
11 trace("The Turkey says...");
12 turkey.gobble();
13 turkey.fly();
14
15 trace("The Duck says...");
16 testDuck(duck);
17
18 trace("The TurkeyAdapter says...");
19 testDuck(turkeyAdapter);
20 }
21 private function testDuck(duck:Duck):Void{
22 duck.quack();
23 duck.fly();
24 }
25
26 }
2 public function quack():Void;
3 public function fly():Void;
4 }
////////////////////////////////////
1 class MallardDuck implements Duck{
2 public function quack():Void{
3 trace("Quack");
4 }
5 public function fly():Void{
6 trace("I'm flying");
7 }
8 }
/////////////////////////////////////
1 interface Turkey{
2 public function gobble():Void;
3 public function fly():Void;
4 }
/////////////////////////////////////
class TurkeyAdapter implements Duck{
private var turkey:Turkey;
public function TurkeyAdapter(turkey:Turkey){
this.turkey = turkey;
}
public function quack():Void{
turkey.gobble();
}
public function fly():Void{
for(var i=0;i<5;i++){
turkey.fly();
}
}
}
//////////////////////////////////////
1 class WildTurkey implements Turkey{
2 public function gobble():Void{ 3 trace("Gobble gobble");
4 }
5 public function fly():Void{
6 trace("I'm flying a short distance");
7 }
8 }
//////////////////////////////////////
1 class DuckTestDrive{
2 public function DuckTestDrive(){
3 initialize();
4 }
5 public function initialize():Void{
6 var duck:MallardDuck = new MallardDuck();
7
8 var turkey:WildTurkey = new WildTurkey();
9 var turkeyAdapter:Duck = new TurkeyAdapter(turkey);
10
11 trace("The Turkey says...");
12 turkey.gobble();
13 turkey.fly();
14
15 trace("The Duck says...");
16 testDuck(duck);
17
18 trace("The TurkeyAdapter says...");
19 testDuck(turkeyAdapter);
20 }
21 private function testDuck(duck:Duck):Void{
22 duck.quack();
23 duck.fly();
24 }
25
26 }
글
Command
Programming/Design Patterns
2007. 2. 21. 11:08
1 interface Command{
2 public function execute();
3 }
///////////////////////////////
1 class Light{
2 private var name:String;
3 public function Light(name:String){
4 this.name = name;
5 }
6 public function lightOn():Void{
7 trace(name+" : 불을 켜다");
8 }
9 public function lightOff():Void{
10 trace(name+" : 불을 끄다");
11 }
12 }
/////////////////////////////////
1 class LightOffCommand implements Command{
2 private var light:Light;
3
4 public function LightOffCommand(light:Light){
5 this.light = light;
6 }
7 public function execute(){
8 light.lightOff();
9 }
10 }
////////////////////////////////////
1 class LightOnCommand implements Command{
2 private var light:Light;
3
4 public function LightOnCommand(light:Light){
5 this.light = light;
6 }
7 public function execute(){
8 light.lightOn();
9 }
10 }
/////////////////////////////////////
1 class RemoteControl{
2 private var onCommands:Array;
3 private var offCommands:Array;
4
5 public function RemoteControl(){
6 onCommands = new Array();
7 offCommands = new Array();
8 }
9 public function setCommand(slot:Number, onCommand:LightOnCommand, offCommand:LightOffCommand):Void{
10 onCommands[slot] = onCommand;
11 offCommands[slot] = offCommand;
12 }
13 public function onButtonWasPressed(slot:Number):Void{
14 onCommands[slot].execute();
15 }
16 public function offButtonWasPressed(slot:Number):Void{
17 offCommands[slot].execute();
18 }
19 }
//////////////////////////////////////
1 class RemoteControlTest
2 {
3 public function RemoteControlTest ()
4 {
5 init ();
6 }
7 public function init () : Void
8 {
9 var remote : RemoteControl = new RemoteControl ();
10 var light : Light = new Light ("스텐드");
11 var lightOn : LightOnCommand = new LightOnCommand (light);
12 var lightOff : LightOffCommand = new LightOffCommand (light);
13 remote.setCommand (0, lightOn, lightOff);
14 remote.onButtonWasPressed (0);
15 remote.offButtonWasPressed (0);
16 }
17 }
2 public function execute();
3 }
///////////////////////////////
1 class Light{
2 private var name:String;
3 public function Light(name:String){
4 this.name = name;
5 }
6 public function lightOn():Void{
7 trace(name+" : 불을 켜다");
8 }
9 public function lightOff():Void{
10 trace(name+" : 불을 끄다");
11 }
12 }
/////////////////////////////////
1 class LightOffCommand implements Command{
2 private var light:Light;
3
4 public function LightOffCommand(light:Light){
5 this.light = light;
6 }
7 public function execute(){
8 light.lightOff();
9 }
10 }
////////////////////////////////////
1 class LightOnCommand implements Command{
2 private var light:Light;
3
4 public function LightOnCommand(light:Light){
5 this.light = light;
6 }
7 public function execute(){
8 light.lightOn();
9 }
10 }
/////////////////////////////////////
1 class RemoteControl{
2 private var onCommands:Array;
3 private var offCommands:Array;
4
5 public function RemoteControl(){
6 onCommands = new Array();
7 offCommands = new Array();
8 }
9 public function setCommand(slot:Number, onCommand:LightOnCommand, offCommand:LightOffCommand):Void{
10 onCommands[slot] = onCommand;
11 offCommands[slot] = offCommand;
12 }
13 public function onButtonWasPressed(slot:Number):Void{
14 onCommands[slot].execute();
15 }
16 public function offButtonWasPressed(slot:Number):Void{
17 offCommands[slot].execute();
18 }
19 }
//////////////////////////////////////
1 class RemoteControlTest
2 {
3 public function RemoteControlTest ()
4 {
5 init ();
6 }
7 public function init () : Void
8 {
9 var remote : RemoteControl = new RemoteControl ();
10 var light : Light = new Light ("스텐드");
11 var lightOn : LightOnCommand = new LightOnCommand (light);
12 var lightOff : LightOffCommand = new LightOffCommand (light);
13 remote.setCommand (0, lightOn, lightOff);
14 remote.onButtonWasPressed (0);
15 remote.offButtonWasPressed (0);
16 }
17 }
글
Singleton
Programming/Design Patterns
2007. 2. 21. 11:08
1 class Singleton{
2 private static var uniqueInstance;
3
4 private function Singleton(){
5
6 }
7 public static function getInstance():Singleton{
8 if(uniqueInstance == null){
9 uniqueInstance = new Singleton();
10 }
11 return uniqueInstance;
12 }
13 public function getName(){
14 trace("Singleton pattern");
15 }
16 }
2 private static var uniqueInstance;
3
4 private function Singleton(){
5
6 }
7 public static function getInstance():Singleton{
8 if(uniqueInstance == null){
9 uniqueInstance = new Singleton();
10 }
11 return uniqueInstance;
12 }
13 public function getName(){
14 trace("Singleton pattern");
15 }
16 }
글
Factory
Programming/Design Patterns
2007. 2. 21. 11:07
1 class SimplePizzaFactory{
2 public function createPizza(type:String):Pizza{
3 var pizza:Pizza = null;
4 if(type == "cheese"){
5 pizza = new CheesePizza();
6 }else if(type == "pepperoni"){
7 pizza = new PepperoniPizza();
8 }else if(type == "clam"){
9 pizza = new ClamPizza();
10 }else if(type == "veggie"){
11 pizza = new VeggiePizza();
12 }
13 return pizza;
14 }
15 }
////////////////////////////////////////
1 class CheesePizza extends Pizza{
2 public function CheesePizza(){
3 pizza_name = "CheesePizza";
4 dough = "얇게";
5 sauce = "짜게";
6 }
7
8 private function bake(){
9 trace("Bake for 25 minutes at 350");
10 }
11 private function cut(){
12 trace("Cutting the pizza into diagonal slices");
13 }
14 private function box(){
15 trace("Place pizza in official PizzaStore box");
16 }
17 public function getName():String{
18 return pizza_name;
19 }
20 }
/////////////////////////////////
1 class VeggiePizza extends Pizza{
2 public function VeggiePizza(){
3 pizza_name = "VeggiePizza";
4 dough = "굵게";
5 sauce = "달게";
6 }
7
8 private function bake(){
9 trace("Bake for 25 minutes at 350");
10 }
11 private function cut(){
12 trace("Cutting the pizza into diagonal slices");
13 }
14 private function box(){
15 trace("Place pizza in official PizzaStore box");
16 }
17 public function getName():String{
18 return pizza_name;
19 }
20 }
/////////////////////////////////////////////
1 class ClamPizza extends Pizza{
2 public function ClamPizza(){
3 pizza_name = "ClamPizza";
4 dough = "굵게";
5 sauce = "달게";
6 }
7
8 private function bake(){
9 trace("Bake for 25 minutes at 350");
10 }
11 private function cut(){
12 trace("Cutting the pizza into diagonal slices");
13 }
14 private function box(){
15 trace("Place pizza in official PizzaStore box");
16 }
17 public function getName():String{
18 return pizza_name;
19 }
20 }
//////////////////////////////////////
1 class PepperoniPizza extends Pizza{
2 public function PepperoniPizza(){
3 pizza_name = "PepperoniPizza";
4 dough = "굵게";
5 sauce = "달게";
6 }
7
8 private function bake(){
9 trace("Bake for 25 minutes at 350");
10 }
11 private function cut(){
12 trace("Cutting the pizza into diagonal slices");
13 }
14 private function box(){
15 trace("Place pizza in official PizzaStore box");
16 }
17 public function getName():String{
18 return pizza_name;
19 }
20 }
/////////////////////////////////////////
1 class Pizza{
2 private var pizza_name:String;
3 private var dough:String;
4 private var sauce:String;
5 private var ary:Array = new Array();
6
7 public function prepare(){
8 trace("피자이름 : "+pizza_name);
9
10 }
11 public function bake(){
12 trace("Bake for 25 minutes at 350");
13 }
14 public function cut(){
15 trace("Cutting the pizza into diagonal slices");
16 }
17 public function box(){
18 trace("Place pizza in official PizzaStore box");
19 }
20 public function getName():String{
21 return pizza_name;
22 }
23
24 }
///////////////////////////////////////
1 class PizzaStore{
2 private var factory:SimplePizzaFactory;
3 public function PizzaStore(factory:SimplePizzaFactory){
4 this.factory = factory;
5 }
6 public function orderPizza(type:String):Pizza{
7 var pizza:Pizza; 8 pizza = factory.createPizza(type);
9 pizza.prepare();
10 // pizza.bake();
11 // pizza.cut();
12 // pizza.box();
13 return pizza;
14 }
15 }
////////////////////////////////////////
var myPizzaStore:PizzaStore = new PizzaStore(new SimplePizzaFactory());
myPizzaStore.orderPizza("cheese");
myPizzaStore.orderPizza("pepperoni");
myPizzaStore.orderPizza("clam");
myPizzaStore.orderPizza("veggie");
2 public function createPizza(type:String):Pizza{
3 var pizza:Pizza = null;
4 if(type == "cheese"){
5 pizza = new CheesePizza();
6 }else if(type == "pepperoni"){
7 pizza = new PepperoniPizza();
8 }else if(type == "clam"){
9 pizza = new ClamPizza();
10 }else if(type == "veggie"){
11 pizza = new VeggiePizza();
12 }
13 return pizza;
14 }
15 }
////////////////////////////////////////
1 class CheesePizza extends Pizza{
2 public function CheesePizza(){
3 pizza_name = "CheesePizza";
4 dough = "얇게";
5 sauce = "짜게";
6 }
7
8 private function bake(){
9 trace("Bake for 25 minutes at 350");
10 }
11 private function cut(){
12 trace("Cutting the pizza into diagonal slices");
13 }
14 private function box(){
15 trace("Place pizza in official PizzaStore box");
16 }
17 public function getName():String{
18 return pizza_name;
19 }
20 }
/////////////////////////////////
1 class VeggiePizza extends Pizza{
2 public function VeggiePizza(){
3 pizza_name = "VeggiePizza";
4 dough = "굵게";
5 sauce = "달게";
6 }
7
8 private function bake(){
9 trace("Bake for 25 minutes at 350");
10 }
11 private function cut(){
12 trace("Cutting the pizza into diagonal slices");
13 }
14 private function box(){
15 trace("Place pizza in official PizzaStore box");
16 }
17 public function getName():String{
18 return pizza_name;
19 }
20 }
/////////////////////////////////////////////
1 class ClamPizza extends Pizza{
2 public function ClamPizza(){
3 pizza_name = "ClamPizza";
4 dough = "굵게";
5 sauce = "달게";
6 }
7
8 private function bake(){
9 trace("Bake for 25 minutes at 350");
10 }
11 private function cut(){
12 trace("Cutting the pizza into diagonal slices");
13 }
14 private function box(){
15 trace("Place pizza in official PizzaStore box");
16 }
17 public function getName():String{
18 return pizza_name;
19 }
20 }
//////////////////////////////////////
1 class PepperoniPizza extends Pizza{
2 public function PepperoniPizza(){
3 pizza_name = "PepperoniPizza";
4 dough = "굵게";
5 sauce = "달게";
6 }
7
8 private function bake(){
9 trace("Bake for 25 minutes at 350");
10 }
11 private function cut(){
12 trace("Cutting the pizza into diagonal slices");
13 }
14 private function box(){
15 trace("Place pizza in official PizzaStore box");
16 }
17 public function getName():String{
18 return pizza_name;
19 }
20 }
/////////////////////////////////////////
1 class Pizza{
2 private var pizza_name:String;
3 private var dough:String;
4 private var sauce:String;
5 private var ary:Array = new Array();
6
7 public function prepare(){
8 trace("피자이름 : "+pizza_name);
9
10 }
11 public function bake(){
12 trace("Bake for 25 minutes at 350");
13 }
14 public function cut(){
15 trace("Cutting the pizza into diagonal slices");
16 }
17 public function box(){
18 trace("Place pizza in official PizzaStore box");
19 }
20 public function getName():String{
21 return pizza_name;
22 }
23
24 }
///////////////////////////////////////
1 class PizzaStore{
2 private var factory:SimplePizzaFactory;
3 public function PizzaStore(factory:SimplePizzaFactory){
4 this.factory = factory;
5 }
6 public function orderPizza(type:String):Pizza{
7 var pizza:Pizza; 8 pizza = factory.createPizza(type);
9 pizza.prepare();
10 // pizza.bake();
11 // pizza.cut();
12 // pizza.box();
13 return pizza;
14 }
15 }
////////////////////////////////////////
var myPizzaStore:PizzaStore = new PizzaStore(new SimplePizzaFactory());
myPizzaStore.orderPizza("cheese");
myPizzaStore.orderPizza("pepperoni");
myPizzaStore.orderPizza("clam");
myPizzaStore.orderPizza("veggie");
글
Decorator
Programming/Design Patterns
2007. 2. 21. 11:07
1 class Beverage{
2 private var descriptions:String = "제목없음";
3 public function getDescription():String{
4 return descriptions;
5 }
6 public function cost():Number{
7 return 0;
8 }
9 }
////////////////////////////////////
1 class CondimentDecorator extends Beverage{
2 public function getDepscription(){
3
4 }
5 }
////////////////////////////////////
1 class DarkRoast extends Beverage{
2 public function DarkRoast(){
3 descriptions = "다트로스트 커피";
4 }
5 public function cost():Number{
6 return 2.89;
7 }
8 }
/////////////////////////////////////
1 class Espresso extends Beverage{
2 public function Espresso(){
3 descriptions = "에스프레소";
4 }
5 public function cost():Number{
6 return 1.99;
7 }
8 }
//////////////////////////////////////
1 class HouseBlend extends Beverage{
2 public function HouseBlend(){
3 descriptions = "하우스 브렌드 커피";
4 }
5 public function cost():Number{
6 return .89;
7 }
8 }
//////////////////////////////////////
1 class Mocha extends CondimentDecorator{
2 private var beverage:Beverage;
3 public function Mocha(beverage:Beverage){
4 this.beverage = beverage;
5 }
6 public function getDescription():String{
7 return beverage.getDescription()+", 모카";
8 }
9 public function cost():Number{
10 return .20+beverage.cost();
11 }
12 }
///////////////////////////////////////
1 class Whip extends Beverage{
2 private var beverage:Beverage;
3 public function Whip(beverage:Beverage){
4 this.beverage = beverage; 5 } 6 public function getDescription():String{
7 return beverage.getDescription()+", 휘핑";
8 }
9 public function cost():Number{
10 return .20+beverage.cost();
11 }
12 }
///////////////////////////////////////
1 class Main{
2 public function Main(){
3 init();
4 }
5 private function init(){
6 var beverage:Beverage = new Espresso();
7 trace(beverage.getDescription()+" $"+beverage.cost());
8
9 var beverage2:Beverage = new DarkRoast();
10 beverage2 = new Mocha(beverage2);
11 beverage2 = new Mocha(beverage2);
12 beverage2 = new Whip(beverage2);
13 trace(beverage2.getDescription()+" $"+beverage2.cost());
14
15 var beverage3:Beverage = new HouseBlend();
16 beverage3 = new Mocha(beverage3);
17 beverage3 = new Whip(beverage3);
18 trace(beverage3.getDescription()+" $"+beverage3.cost());
19
20 }
21 }
2 private var descriptions:String = "제목없음";
3 public function getDescription():String{
4 return descriptions;
5 }
6 public function cost():Number{
7 return 0;
8 }
9 }
////////////////////////////////////
1 class CondimentDecorator extends Beverage{
2 public function getDepscription(){
3
4 }
5 }
////////////////////////////////////
1 class DarkRoast extends Beverage{
2 public function DarkRoast(){
3 descriptions = "다트로스트 커피";
4 }
5 public function cost():Number{
6 return 2.89;
7 }
8 }
/////////////////////////////////////
1 class Espresso extends Beverage{
2 public function Espresso(){
3 descriptions = "에스프레소";
4 }
5 public function cost():Number{
6 return 1.99;
7 }
8 }
//////////////////////////////////////
1 class HouseBlend extends Beverage{
2 public function HouseBlend(){
3 descriptions = "하우스 브렌드 커피";
4 }
5 public function cost():Number{
6 return .89;
7 }
8 }
//////////////////////////////////////
1 class Mocha extends CondimentDecorator{
2 private var beverage:Beverage;
3 public function Mocha(beverage:Beverage){
4 this.beverage = beverage;
5 }
6 public function getDescription():String{
7 return beverage.getDescription()+", 모카";
8 }
9 public function cost():Number{
10 return .20+beverage.cost();
11 }
12 }
///////////////////////////////////////
1 class Whip extends Beverage{
2 private var beverage:Beverage;
3 public function Whip(beverage:Beverage){
4 this.beverage = beverage; 5 } 6 public function getDescription():String{
7 return beverage.getDescription()+", 휘핑";
8 }
9 public function cost():Number{
10 return .20+beverage.cost();
11 }
12 }
///////////////////////////////////////
1 class Main{
2 public function Main(){
3 init();
4 }
5 private function init(){
6 var beverage:Beverage = new Espresso();
7 trace(beverage.getDescription()+" $"+beverage.cost());
8
9 var beverage2:Beverage = new DarkRoast();
10 beverage2 = new Mocha(beverage2);
11 beverage2 = new Mocha(beverage2);
12 beverage2 = new Whip(beverage2);
13 trace(beverage2.getDescription()+" $"+beverage2.cost());
14
15 var beverage3:Beverage = new HouseBlend();
16 beverage3 = new Mocha(beverage3);
17 beverage3 = new Whip(beverage3);
18 trace(beverage3.getDescription()+" $"+beverage3.cost());
19
20 }
21 }
글
Observer
Programming/Design Patterns
2007. 2. 21. 11:06
1 class CurrentConditionsDisplay implements Observer, DisplayElement{
2 private var temperature:Number;
3 private var humidity:Number;
4 private var pressure:Number;
5 private var weatherData:Subject;
6
7 public function CurrentConditionsDisplay(weatherData:Subject){
8 this.weatherData = weatherData;
9 weatherData.registerObserver(this);
10 }
11 public function update(temperature:Number, humidity:Number, pressure:Number):Void{
12 this.temperature = temperature;
13 this.humidity = humidity;
14 this.pressure = pressure;
15 display();
16 }
17 public function display():Void{
18 trace("Temperature: "+temperature);
19 trace("Humidity: "+humidity);
20 trace("Pressure: "+pressure);
21 trace("----------------------");
22 }
23 }
////////////////////////////////////////////////////////////////
1 interface DisplayElement{
2 public function display():Void;
3 }
////////////////////////////////////////////////////////////////
1 interface Observer{
2 public function update(temp:Number, humidity:Number, pressure:Number):Void;
3 }
///////////////////////////////////////////////////////////////
1 interface Subject{
2 public function registerObserver(o:Observer):Void;
3 public function removeObserver(o:Observer):Void;
4 public function notifyObserver():Void;
5 }
///////////////////////////////////////////////////////////////
1 class WeatherData implements Subject{
2 private var observers:Array;
3 private var temperature:Number;
4 private var humidity:Number;
5 private var pressure:Number;
6
7 public function WeatherData(){
8 observers = new Array();
9 }
10 public function registerObserver(o:Observer):Void{
11 observers.push(o);
12 }
13 public function removeObserver(o:Observer):Void{
14 var lastIndex:Number = observers.length;
15 for(var i=0;i<lastIndex;i++){
16 if(observers[i] == o){
17 observers.splice(i,1);
18 }
19 }
20 }
21 public function notifyObserver():Void{
22 var lastIndex:Number = observers.length;
23 for(var i=0;i< lastIndex;i++){
24 var observer:Observer = Observer(observers[i]);
25 observer.update(temperature, humidity, pressure);
26 }
27 }
28 public function measurementsChanged():Void{
29 notifyObserver();
30 }
31 public function setMeasurements(temperature:Number, humidity:Number, pressure:Number):Void{
32 this.temperature = temperature;
33 this.humidity = humidity;
34 this.pressure = pressure;
35 measurementsChanged();
36 }
37 }
//////////////////////////////////////////////////////////////
1 class WeatherStation{
2 public function WeatherStation(){
3 var weatherData:WeatherData = new WeatherData();
4 var weatherData2:WeatherData = new WeatherData();
5 var currentDisplay:CurrentConditionsDisplay = new CurrentConditionsDisplay(weatherData);
6 var currentDisplay:CurrentConditionsDisplay = new CurrentConditionsDisplay(weatherData2);
7 weatherData.setMeasurements(80,30,23);
8 weatherData2.setMeasurements(11,22,33);
9 weatherData.setMeasurements(22,30,23);
10
11 }
12 }
///////////////////////////////////////////////////////////////////
2 private var temperature:Number;
3 private var humidity:Number;
4 private var pressure:Number;
5 private var weatherData:Subject;
6
7 public function CurrentConditionsDisplay(weatherData:Subject){
8 this.weatherData = weatherData;
9 weatherData.registerObserver(this);
10 }
11 public function update(temperature:Number, humidity:Number, pressure:Number):Void{
12 this.temperature = temperature;
13 this.humidity = humidity;
14 this.pressure = pressure;
15 display();
16 }
17 public function display():Void{
18 trace("Temperature: "+temperature);
19 trace("Humidity: "+humidity);
20 trace("Pressure: "+pressure);
21 trace("----------------------");
22 }
23 }
////////////////////////////////////////////////////////////////
1 interface DisplayElement{
2 public function display():Void;
3 }
////////////////////////////////////////////////////////////////
1 interface Observer{
2 public function update(temp:Number, humidity:Number, pressure:Number):Void;
3 }
///////////////////////////////////////////////////////////////
1 interface Subject{
2 public function registerObserver(o:Observer):Void;
3 public function removeObserver(o:Observer):Void;
4 public function notifyObserver():Void;
5 }
///////////////////////////////////////////////////////////////
1 class WeatherData implements Subject{
2 private var observers:Array;
3 private var temperature:Number;
4 private var humidity:Number;
5 private var pressure:Number;
6
7 public function WeatherData(){
8 observers = new Array();
9 }
10 public function registerObserver(o:Observer):Void{
11 observers.push(o);
12 }
13 public function removeObserver(o:Observer):Void{
14 var lastIndex:Number = observers.length;
15 for(var i=0;i<lastIndex;i++){
16 if(observers[i] == o){
17 observers.splice(i,1);
18 }
19 }
20 }
21 public function notifyObserver():Void{
22 var lastIndex:Number = observers.length;
23 for(var i=0;i< lastIndex;i++){
24 var observer:Observer = Observer(observers[i]);
25 observer.update(temperature, humidity, pressure);
26 }
27 }
28 public function measurementsChanged():Void{
29 notifyObserver();
30 }
31 public function setMeasurements(temperature:Number, humidity:Number, pressure:Number):Void{
32 this.temperature = temperature;
33 this.humidity = humidity;
34 this.pressure = pressure;
35 measurementsChanged();
36 }
37 }
//////////////////////////////////////////////////////////////
1 class WeatherStation{
2 public function WeatherStation(){
3 var weatherData:WeatherData = new WeatherData();
4 var weatherData2:WeatherData = new WeatherData();
5 var currentDisplay:CurrentConditionsDisplay = new CurrentConditionsDisplay(weatherData);
6 var currentDisplay:CurrentConditionsDisplay = new CurrentConditionsDisplay(weatherData2);
7 weatherData.setMeasurements(80,30,23);
8 weatherData2.setMeasurements(11,22,33);
9 weatherData.setMeasurements(22,30,23);
10
11 }
12 }
///////////////////////////////////////////////////////////////////
글
StrategyPattern
Programming/Design Patterns
2007. 2. 21. 11:06
////////////////////////////////////////////////
////////////////////////////////////////////////
////////////////////////////////////////////////
////////////////////////////////////////////////
////////////////////////////////////////////////
///////////////////////////////////////////////
/////////////////////////////////////////////////
/////////////////////////////////////////////////
/////////////////////////////////////////////////
/////////////////////////////////////////////////