MM 答应和我交往了,这对我是莫大的鼓励啊,ME决定再接再厉,一鼓作气,以迅雷不及掩耳盗铃之势夺取她的芳心。请客吃饭,不管饭店多高档繁华,都不及自己亲手做的表真心。于是,我决定亲自下厨,做饺子。更主要的是,我的财政危机提前到了。
首先,分析下需求:
饺子,首先要有很多准备工作。皮,饺子馅等原料等。
MM要求: 他喜欢吃猪肉鸡蛋皮饺子、和牛肉面粉皮饺子。其他的饺子他不能吃。oh, my god  有点难度,但是运用模式,very easy!
饺子皮、饺子馅 为2个产品族;所以要建立2个具体实现类工厂
 
1.模式结构
 
请MM吃饭之抽象工厂模式实现_职场
 
角色:
抽象工厂角色:BoiledDumpling
具体工厂类:BeefFlourDumpling、和PigEggDumpling
抽象产品:Skin、Stuffing
具体产品:PigStuff、BeefStuff、EggSkin、FlourSkin
 
代码:
package abstractfactory;
/*
* 抽象产品角色
*/

public interface Skin {

  public void desc();
}
 
package abstractfactory;
/*
*抽象产品角色
*/

public interface Stuffing {

  public void boided();
}
 
package abstractfactory;
/*
* 抽象工厂角色
* 水饺要具备2种原料
*/

public interface BoiledDumpling {

  /*
    * 做饺子皮
    */

  public Skin skinFacotry();
    
  /*
    * 饺子馅
    */

  public Stuffing stuffingFactory();
}
 
具体产品角色
package abstractfactory;

public class EggSkin implements Skin {

  public void desc() {
    
    System.out.println("做好了鸡蛋饺子皮");

  }

}
package abstractfactory;
public class FlourSkin implements Skin {

  public void desc() {
    
    System.out.println("做好了面粉饺子皮");

  }

}
 
package abstractfactory;

public class PigStuff implements Stuffing {

  public void boided() {
    
    System.out.println("猪肉馅拌好了");

  }

}
 
package abstractfactory;

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();
  }

}
 
package abstractfactory;

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();

        
  }

}
 
最后,对工厂,进行封装一下。添加一个类
package abstractfactory;

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();
        
  }

}
 
效果和前面的一样