请MM吃饭之抽象工厂模式实现

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

}
 
效果和前面的一样

你可能感兴趣的:(java,设计模式,职场,抽象,休闲)