공장 방법 모델 과 단순 공장

3157 단어 공장 방법 모델
이 두 가지 디자인 모델 은 어느 정도 비슷 한 점 이 있 는데 모두 수요 에 따라 실례 화 대상 이다.그러나 공장 방법의 중용 성 이 더욱 좋 고 OOP 의 개방 인 폐쇄 원칙 에 부합된다.
간단 한 공장 사례:
public class Creator

{

	public static function simpleFactory(product:String):IProduct{

		if (product=="p1") {

			return new Product1();

		}

		else if (product=="p2") {

			return new Product2();

		}

	}

}

단순 공장 은 확장 이 쉽 지 않 으 며, 신제품 가입 이 필요 하 다 면 simpleFactory () 방법 을 수정 해 야 한다.
 
공장 방법 사례: 제품 인터페이스 IProduct. as
package{

public interface IProduct

{

	function manipulate():void;

}

}


 제품 종류 1: Product1. as
package{
 internal class Product1 implements IProduct { 
       public function manipulate():void{ 
                trace("   Product1 manipulate()");
          } 
  }
 }

 제품 종류 2: Product2. as
package{

internal class Product2 implements IProduct

{

	public function manipulate():void{

		trace("   Product2 manipulate()");

	}

}

}


 
추상 적 인 생 성 클래스: Creator. as 는 추상 적 인 생 성 클래스 가 있어 서 수요 에 따라 제품 을 예화 할 수 있 기 때문에 우리 가 아무리 신제품 류 를 추가 하 더 라 도 추상 적 인 생 성 클래스 에 계승 되 는 해당 제품 의 생 성 클래스 를 추가 하면 됩 니 다. 이것 은 개방 - 닫 기 원칙 에 부합 합 니 다.
package {

	import flash.errors.IllegalOperationError;

	public class Creator {

		public function doStuff():void {

			var product:IProduct = this.factoryMethod();

			product.manipulate();//         

		}

		protected function factoryMethod():IProduct {//   “    ”,  “  ”  

			throw new IllegalOperationError("Abstract method:must be overridden in a subclass");

			return null;

		}

		

	}

}


 
제품 1 종류 만 들 기: CreatorA. as
package {
 public class CreatorA extends Creator { 
        override protected function factoryMethod():IProduct {
             trace("      2");
              return new Product1();
 }
 } 
}

 
제품 2 종류 만 들 기: CreatorB. as
package { 
     public class CreatorB extends Creator { 
         override protected function factoryMethod():IProduct { 
         trace("      2");
return new Product2();
}
}
}

 
문서 종류: Main. as
package {

	import flash.display.Sprite;

	public class Main extends Sprite {

		public function Main() {

			var cA:Creator = new CreatorA();

			var cB:Creator = new CreatorB();

			

			cA.doStuff();

			cB.doStuff();

		}

	}

}


 
 문서 클래스 출력:
제품
Product1 의 manipulate () 를 호출 하 였 습 니 다.
제품
Product2 의 manipulate () 를 호출 하 였 습 니 다.
 
 참고 자료: < ActionScript 3.0 디자인 모델 >  공장 방법 모델

좋은 웹페이지 즐겨찾기