加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

[设计模式as3版]六.抽象工厂

发布时间:2020-12-15 18:01:42 所属栏目:百科 来源:网络整理
导读:package com.pizza {import com.pizza.ingredient.Cheese;import com.pizza.ingredient.Dough;import com.pizza.ingredient.Sauce;//Pizza是抽象类public class Pizza {protected var _name:String;protected var _dough:Dough;protected var _sauce:Sauce;p
package com.pizza {
	
	import com.pizza.ingredient.Cheese;
	import com.pizza.ingredient.Dough;
	import com.pizza.ingredient.Sauce;
	
	//Pizza是抽象类
	public class Pizza {
		
		protected var _name:String;
		protected var _dough:Dough;
		protected var _sauce:Sauce;
		protected var _cheese:Cheese;
		
		public function Pizza() {
			
		}
		
		public function prepare():void {
			trace("Preparing " + name);
		}
		
		public function bake():void {
			trace("Baking " + name);	
		}
		
		public function box():void {
			trace("Boxing " + name);	
		}
		
		public function get name():String {
			return _name;
		}
	}
}


package com.pizza.ingredient {
	
	public interface Dough {
	
	}
}

package com.pizza.ingredient {
	
	public interface Cheese {
		
	}
}

package com.pizza.ingredient {
	
	public interface Sauce {
		
	}
}


package com.pizza.ingredient {
	
	public class BeijingDough implements Dough {
		
		public function BeijingDough() {
			
		}
		
		public function get name():String {
			return "BeijingDough";
		}
		
	}
}

package com.pizza.ingredient {
	
	public class BeijingCheese implements Cheese {
		
		public function BeijingCheese() {
			
		}
		
		public function get name():String {
			return "BeijingCheese";
		}
		
	}
}

package com.pizza.ingredient {
	
	public class BeijingSauce implements Sauce {
		
		public function BeijingSauce() {
			
		}
		
		public function get name():String {
			return "BeijingSauce";
		}
	}
}

package com.pizza.ingredient {
	
	public class ShanghaiCheese implements Cheese {
		
		public function ShanghaiCheese() {
			
		}
		
		public function get name():String {
			return "ShanghaiCheese";
		}
	}
}

package com.pizza.ingredient {
	
	public class ShanghaiSauce implements Sauce {
		
		public function ShanghaiSauce() {
			
		}
		
		public function get name():String {
			return "ShanghaiSauce";
		}
	}
}

package com.pizza.ingredient {
	
	public class ShanghaiDough implements Dough {
		
		public function ShanghaiDough() {
			
		}
		
		public function get name():String {
			return "ShanghaiDough";
		}
	}
}

package com.pizza.ingredient {
	
	public interface PizzaIngredientFactory {
		
		function createDough():Dough;
		
		function createSauce():Sauce;
		
		function createCheese():Cheese;
	}
}

package com.pizza.ingredient {
	
	public class BeijingPizzaIngredientFactory implements PizzaIngredientFactory {
		
		public function BeijingPizzaIngredientFactory() {
			
		}
		
		public function createDough():Dough {
			return new BeijingDough();
		}
		
		public function createSauce():Sauce {
			return new BeijingSauce();
		}
		
		public function createCheese():Cheese {
			return new BeijingCheese();	
		}
	}
}

package com.pizza.ingredient {
	
	public class ShanghaiPizzaIngredientFactory implements PizzaIngredientFactory {
		
		public function ShanghaiPizzaIngredientFactory() {
			
		}
		
		public function createDough():Dough {
			return new ShanghaiDough();
		}
		
		public function createSauce():Sauce {
			return new ShanghaiSauce();
		}
		
		public function createCheese():Cheese {
			return new ShanghaiCheese();
		}
	}
}

package com.pizza {
	
	import com.pizza.ingredient.PizzaIngredientFactory;
	
	public class SaucePizza extends Pizza {
		
		private var pizzaIngredientFactory:PizzaIngredientFactory;
		
		public function SaucePizza(pizzaIngredientFactory:PizzaIngredientFactory) {
			_name = "SaucePizza";
			this.pizzaIngredientFactory = pizzaIngredientFactory;	
		}
		
		override public function prepare():void {
			trace("Preparing " + name);
			_cheese = pizzaIngredientFactory.createCheese();
			_dough = pizzaIngredientFactory.createDough();
			_sauce = pizzaIngredientFactory.createSauce();
		}
		
	}
}

package com.pizza {
	
	import com.pizza.ingredient.PizzaIngredientFactory;
	
	public class DoughPizza extends Pizza {
		
		private var pizzaIngredientFactory:PizzaIngredientFactory;
		
		public function DoughPizza(pizzaIngredientFactory:PizzaIngredientFactory) {
			_name = "DoughPizza";
			this.pizzaIngredientFactory = pizzaIngredientFactory;	
		}
		
		override public function prepare():void {
			trace("Preparing " + name);
			_cheese = pizzaIngredientFactory.createCheese();
			_dough = pizzaIngredientFactory.createDough();
			_sauce = pizzaIngredientFactory.createSauce();
		}
		
	}
}

package com.pizza {
	
	import com.pizza.ingredient.PizzaIngredientFactory;
	
	public class CheesePizza extends Pizza {
		
		private var pizzaIngredientFactory:PizzaIngredientFactory;
		
		public function CheesePizza(pizzaIngredientFactory:PizzaIngredientFactory) {
			_name = "CheesePizza";
			this.pizzaIngredientFactory = pizzaIngredientFactory;	
		}
		
		override public function prepare():void {
			trace("Preparing " + name);
			_cheese = pizzaIngredientFactory.createCheese();
			_dough = pizzaIngredientFactory.createDough();
			_sauce = pizzaIngredientFactory.createSauce();
		}
		
	}
}



package com.pizza.store {
	import com.pizza.Pizza;
	
	//抽象类
	public class PizzaStore {
		
		public function PizzaStore() {
			
		}
		
		public function orderPizza(type:String):Pizza {
			var pizza:Pizza = createPizza(type);
			pizza.prepare();
			pizza.bake();
			pizza.box();
			return pizza;
		}
		
		//工厂方法
		protected function createPizza(type:String):Pizza {
			return null;
		}
	}
}

package com.pizza.store {
	
	import com.pizza.CheesePizza;
	import com.pizza.DoughPizza;
	import com.pizza.Pizza;
	import com.pizza.SaucePizza;
	import com.pizza.ingredient.BeijingPizzaIngredientFactory;
	
	public class BeijingPizzaStore extends PizzaStore {
		
		public function BeijingPizzaStore() {
			
		}
		
		override protected function createPizza(type:String):Pizza {
			if(type == "cheese") {  
				return new CheesePizza(new BeijingPizzaIngredientFactory());
			}else if(type == "sauce") {  
				return new SaucePizza(new BeijingPizzaIngredientFactory());
			}else if(type == "dough") {  
				return new DoughPizza(new BeijingPizzaIngredientFactory());
			}
			return null;
		}
		
	}
}

package com.pizza.store {
	
	import com.pizza.CheesePizza;
	import com.pizza.DoughPizza;
	import com.pizza.Pizza;
	import com.pizza.SaucePizza;
	import com.pizza.ingredient.ShanghaiPizzaIngredientFactory;
	
	public class ShanghaiPizzaStore extends PizzaStore {
		
		public function ShanghaiPizzaStore() {
			
		}
		
		override protected function createPizza(type:String):Pizza {
			if(type == "cheese") {  
				return new CheesePizza(new ShanghaiPizzaIngredientFactory());
			}else if(type == "sauce") {  
				return new SaucePizza(new ShanghaiPizzaIngredientFactory());
			}else if(type == "dough") {  
				return new DoughPizza(new ShanghaiPizzaIngredientFactory());
			}
			return null;
		}
		
	}
}

package {
	
	import com.pizza.Pizza;
	import com.pizza.store.BeijingPizzaStore;
	import com.pizza.store.PizzaStore;
	import com.pizza.store.ShanghaiPizzaStore;
	
	import flash.display.Sprite;
	
	public class AbstractFactoryTest extends Sprite {
		
		public function AbstractFactoryTest() {
			var pizzaStore:PizzaStore = new ShanghaiPizzaStore();
			var pizza:Pizza = pizzaStore.orderPizza("cheese");
			pizza = pizzaStore.orderPizza("sauce");
			pizza = pizzaStore.orderPizza("dough");
			
			pizzaStore = new BeijingPizzaStore();
			pizza = pizzaStore.orderPizza("cheese");
			pizza = pizzaStore.orderPizza("sauce");
			pizza = pizzaStore.orderPizza("dough");
		}
	}
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读