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

原创作品,允许转载,转载时请务必以超链接形式标明文章  原始出处 、作者信息和本声明。否则将追究法律责任。 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(); 

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


 
效果和前面的一样

本文出自 “简单” 博客,请务必保留此出处http://dba10g.blog.51cto.com/764602/228956

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值