-
抽象工厂
类图:
class Class Model
?interface?
?interface?
?inte
rface?
Veggies
Sauce
Dough
PizzaStore
#
createPizza(String) :
Pizza
~sauce
+
orderPizza(String) : Pizza
~d
ough
~veggies
Eggplant
< br>MarinaraSauce
ThickCrustDough
< br>+
Eggplant()
ChicagoPizzaS
tore
+
MarinaraSauce()
+
ThickCrustDough()
#
createPizza(String) : Pizza
G
arlic
NYPizzaStore
PlumTomatoS
auce
ThinCrustDough
+
Garlic()
#
createPizza(String) : Pizza
+
PlumTomatoSauce()
+
ThinCrustDough()
BlackOliv
e
s
Pizza
?interface?
Onion
PizzaIngredientFactory
+
BlackOlives()
~
dough: Dough
+
createDough() : Dough
+
Onion()
~
name:
String
+
createSauce() :
Sauce
~
sauce:
Sauce
+
createVeggies() :
Veggies[]
~
veggies: Veggies
([])
Mushroom
~
bake() : void
~ingredientFact
ory
~ingredientFactory
+
Mushroom()
~
box()
: void
~
cut() :
void
~
prepare() : void
ChicagoPizzaIngredientFactory
~
setName(String) : void
NYPizz
aIngredientFactory
?property
get?
+
createDough() :
Dough
~
getname() :
String
+
createSauce() :
Sauce
+
createDough() :
Dough
+
createVeggies() :
Veggies[]
+
createSauce() :
Sauce
+
createVeggies() : Veg
gies[]
VeggiesPizza
CheesePizz
a
~
ingredientFactory:
PizzaIngredientFactory
~
ingredientFactory:
PizzaIngredientFactory
~
prepare() : void
+
VeggiesPizza(PizzaIngredientFactory)
+
CheesePizza(PizzaIngredientFactory)
~
prepare() :
void
代码:
public
interface Sauce {
public class
PlumTomatoSauce
}
implements
Sauce{
public class MarinaraSauce
implements
public
PlumTomatoSauce(){
Sauce{
n(
public MarinaraSauce(){
PlumTomatoSauce...
n(
}
MarinaraSauce...
}
}
public
interface Dough {
}
1
}
public Mushroom(){
public class ThickCrustDough
n(
implements Dough{
Mushroom...
public ThickCrustDough(){
}
n(
}
ThickCrustDough...
public
class Garlic implements
}
Veggies{
}
public Garlic(){
public
class
ThinCrustDough
implements
n(
Dough{
Garlic...
public
ThinCrustDough(){
}
n(
}
ThinCrustDough...
public
class Eggplant implements
}
Veggies{
}
public Eggplant(){
public
interface Veggies {
n(
Eggplant...
}
}
public
class
Onion
implements
Veggies{
}
public Onion(){
public class
BlackOlives implements
n(
Veggies{
Onion...
public
BlackOlives(){
}
n(
}
BlackOlives...
public class
Mushroom implements
}
Veggies{
}
public abstract class Pizza
{
String name;
Dough dough;
Sauce sauce;
Veggies veggies[];
abstract void prepare();
void bake(){
n(
}
void cut(){
n(
}
void box(){
n(
}
void setName(String name){
=name;
}
String
getname(){
return name;
}
}
2
public interface PizzaIngredientFactory
{
public Dough
createDough();
public Sauce
createSauce();
public
Veggies[] createVeggies();
}
public class NYPizzaIngredientFactory
implements PizzaIngredientFactory{
public Dough createDough(){
return new
ThinCrustDough();
}
public Sauce createSauce(){
return new
MarinaraSauce();
}
public Veggies[]
createVeggies(){
Veggies veggies[]={new Garlic(),new
Onion(),new Mushroom()};
return veggies;
}
}
public class
ChicagoPizzaIngredientFactory implements
PizzaIngredientFactory{
public Dough createDough(){
return new
ThickCrustDough();
}
public Sauce createSauce(){
return new
PlumTomatoSauce();
}
public Veggies[]
createVeggies(){
Veggies veggies[]={new
BlackOlives(),new Eggplant()};
return veggies;
}
}
public class
VeggiesPizza extends Pizza{
PizzaIngredientFactory
ingredientFactory;
public
VeggiesPizza(PizzaIngredientFactory
ingredientFactory){
ientFactory=ingredientFactory;
}
void prepare(){
n(
dough=Dough();
sauce=Sauce();
veggies=Veggies();
}
}
public class
CheesePizza extends Pizza{
PizzaIngredientFactory
ingredientFactory;
public
CheesePizza(PizzaIngredientFactory
ingredientFactory){
ientFactory=ingredientFactory;
}
void prepare(){
n(
dough=Dough();
sauce=Sauce();
}
3
}
public abstract class PizzaStore {
public Pizza
orderPizza(String type){
Pizza pizza;
pizza=createPizza(type);
e();
();
();
();
return pizza;
}
protected abstract Pizza
createPizza(String type);
}
public class NYPizzaStore extends
PizzaStore{
protected Pizza
createPizza(String item){
Pizza pizza=null;
PizzaIngredientFactory
ingredientFactory=new
NYPizzaIngredientFactory();
if((
pizza=new
CheesePizza(ingredientFactory);
e(
}
else if((
pizza=new
VeggiesPizza(ingredientFactory);
e(
}
return pizza;
}
}
public class ChicagoPizzaStore extends
PizzaStore{
protected Pizza
createPizza(String item){
Pizza pizza=null;
PizzaIngredientFactory
ingredientFactory=new
ChicagoPizzaIngredientFactory();
if((
pizza=new
CheesePizza(ingredientFactory);
e(
}
else if((
pizza=new
VeggiesPizza(ingredientFactory);
e(
}
return pizza;
}
}
测试结果
Preparing
New York Style Cheese Pizza
Add
ThinCrustDough...
4
-
-
-
-
-
-
-
-
-
上一篇:饥荒海难百科全书
下一篇:高考英语概要写作指导及训练记叙文