原创作品,允许转载,转载时请务必以超链接形式标明文章
原始出处 、作者信息和本声明。否则将追究法律责任。
http://dba10g.blog.51cto.com/764602/228956
MM 答应和我交往了,这对我是莫大的鼓励啊,ME决定再接再厉,一鼓作气,以迅雷不及掩耳盗铃之势夺取她的芳心。请客吃饭,不管饭店多高档繁华,都不及自己亲手做的表真心。于是,我决定亲自下厨,做饺子。更主要的是,我的财政危机提前到了。
首先,分析下需求:
饺子,首先要有很多准备工作。皮,饺子馅等原料等。
MM要求: 他喜欢吃猪肉鸡蛋皮饺子、和牛肉面粉皮饺子。其他的饺子他不能吃。oh, my god 有点难度,但是运用模式,very easy!
饺子皮、饺子馅 为2个产品族;所以要建立2个具体实现类工厂
1.模式结构
角色:
抽象工厂角色:BoiledDumpling
具体工厂类:BeefFlourDumpling、和PigEggDumpling
抽象产品:Skin、Stuffing
具体产品:PigStuff、BeefStuff、EggSkin、FlourSkin
代码:
package abstractfactory;
/*
* 抽象产品角色
*/
public interface Skin {
public void desc();
}
/*
* 抽象产品角色
*/
public interface Skin {
public void desc();
}
package abstractfactory;
/*
*抽象产品角色
*/
public interface Stuffing {
public void boided();
}
/*
*抽象产品角色
*/
public interface Stuffing {
public void boided();
}
package abstractfactory;
/*
* 抽象工厂角色
* 水饺要具备2种原料
*/
public interface BoiledDumpling {
/*
* 做饺子皮
*/
public Skin skinFacotry();
/*
* 饺子馅
*/
public Stuffing stuffingFactory();
}
/*
* 抽象工厂角色
* 水饺要具备2种原料
*/
public interface BoiledDumpling {
/*
* 做饺子皮
*/
public Skin skinFacotry();
/*
* 饺子馅
*/
public Stuffing stuffingFactory();
}
具体产品角色
package abstractfactory;
public class EggSkin implements Skin {
public void desc() {
System.out.println( "做好了鸡蛋饺子皮");
}
}
public class EggSkin implements Skin {
public void desc() {
System.out.println( "做好了鸡蛋饺子皮");
}
}
package abstractfactory;
public class FlourSkin implements Skin {
public void desc() {
System.out.println( "做好了面粉饺子皮");
}
}
public class FlourSkin implements Skin {
public void desc() {
System.out.println( "做好了面粉饺子皮");
}
}
package abstractfactory;
public class PigStuff implements Stuffing {
public void boided() {
System.out.println( "猪肉馅拌好了");
}
}
public class PigStuff implements Stuffing {
public void boided() {
System.out.println( "猪肉馅拌好了");
}
}
package abstractfactory;
public class BeefStuff implements Stuffing {
public void boided() {
System.out.println( "牛肉馅拌好了");
}
}
public class BeefStuff implements Stuffing {
public void boided() {
System.out.println( "牛肉馅拌好了");
}
}
具体工厂实现类
package abstractfactory;
public class BeefFlourDumpling implements BoiledDumpling {
public Skin skinFacotry() {
return new FlourSkin(); //鸡蛋皮
}
public Stuffing stuffingFactory() {
return new BeefStuff();
}
}
public class BeefFlourDumpling implements BoiledDumpling {
public Skin skinFacotry() {
return new FlourSkin(); //鸡蛋皮
}
public Stuffing stuffingFactory() {
return new BeefStuff();
}
}
package abstractfactory;
public class PigEggDumpling implements BoiledDumpling {
public Skin skinFacotry() {
return new EggSkin(); //鸡蛋皮
}
public Stuffing stuffingFactory() {
return new PigStuff();
}
}
public class PigEggDumpling implements BoiledDumpling {
public Skin skinFacotry() {
return new EggSkin(); //鸡蛋皮
}
public Stuffing stuffingFactory() {
return new PigStuff();
}
}
测试类
package abstractfactory;
public class Client {
/**
* @param args
*/
public static void main(String[] args) {
BoiledDumpling dump = new BeefFlourDumpling();
Skin skin1 = dump.skinFacotry();
Stuffing stuff1 = dump.stuffingFactory();
skin1.desc();
stuff1.boided();
}
}
public class Client {
/**
* @param args
*/
public static void main(String[] args) {
BoiledDumpling dump = new BeefFlourDumpling();
Skin skin1 = dump.skinFacotry();
Stuffing stuff1 = dump.stuffingFactory();
skin1.desc();
stuff1.boided();
}
}
最后,对工厂,进行封装一下。添加一个类
package abstractfactory;
public class Factory {
private BoiledDumpling factory;
public Factory(BoiledDumpling factory){
this.factory = factory;
}
public void eat(){
factory.skinFacotry().desc();
factory.stuffingFactory().boided();
}
}
public class Factory {
private BoiledDumpling factory;
public Factory(BoiledDumpling factory){
this.factory = factory;
}
public void eat(){
factory.skinFacotry().desc();
factory.stuffingFactory().boided();
}
}
测试代码:
package abstractfactory;
public class Client {
/**
* @param args
*/
public static void main(String[] args) {
BoiledDumpling dump1 = new PigEggDumpling();
Factory factory = new Factory(dump1);
factory.eat();
}
}
public class Client {
/**
* @param args
*/
public static void main(String[] args) {
BoiledDumpling dump1 = new PigEggDumpling();
Factory factory = new Factory(dump1);
factory.eat();
}
}
效果和前面的一样
本文出自 “简单” 博客,请务必保留此出处http://dba10g.blog.51cto.com/764602/228956