门面模式

来源:互联网 发布:java语言代码大全 编辑:程序博客网 时间:2024/06/08 12:01

        随着软件处理的业务越来越大,一个业务逻辑类里面可能涉及到很多个类进行实现,这样会增加该类的复杂度。使用门面设计模式可以很好滴解决这个问题。门面模式:也可以成为正面模式、外观模式,将一组复杂的类包装到一个简单的接口中进行实现。J2EE的DAO组件和HibernateTemplate中使用了这种设计模式。下面以客户下馆子就餐为例讲解门面模式,下馆子就餐要分为:1. 在点好餐后在收银台付账;2. 厨师烹饪你的食物;3. 服务员为你上餐。每一步都是一个部门,就用一个类来封装。

1.

package com.lanp.facade;

/**
 * 收银台支付类
 * @author LanP
 * @version v1.0
 */
public interface IMyPayment {
 String pay();
}

 

2.

package com.lanp.facade;

/**
 * 收银台支付类的实现
 * @author LanP
 * @version v1.0
 */
public class MyPaymentImpl implements IMyPayment {

 @Override
 public String pay() {
  String food = "客家酿豆腐";
  System.out.println("你已经成功为 " + food + " 支付了!");
  return food;
 }

}

 

3.

package com.lanp.facade;

/**
 * 烹饪部门接口
 * @author LanP
 * @version v1.0
 */
public interface IMyCook {
 String cooking(String food);
}

 

4.

package com.lanp.facade;

/**
 * 烹饪部门接口的实现
 * @author LanP
 * @version v1.0
 */
public class MyCookImpl implements IMyCook {

 @Override
 public String cooking(String food) {
  System.out.println("厨师正在为你做:" + food);
  return food;
 }

}

 

5.

package com.lanp.facade;

/**
 * 服务员接口
 * @author LanP
 * @version v1.0
 */
public interface IMyWaiter {
 void service(String food);
}

 

6.

package com.lanp.facade;

/**
 * 服务员接口实现
 * @author LanP
 * @version v1.0
 */
public class MyWaiterImpl implements IMyWaiter {

 @Override
 public void service(String food) {
  System.out.println("你好,你点的食物 " + food + " 已经为你准备好了,请慢用!");
 }

}

 

7.

package com.lanp.facade;

/**
 * 客户在餐馆就餐的门面类
 * @author LanP
 * @version v1.0
 */
public class MyFacade {
 private IMyPayment myPayment;
 private IMyCook myCook;
 private IMyWaiter myWaiter;
 
 public MyFacade() {
  myPayment = new MyPaymentImpl();
  myCook = new MyCookImpl();
  myWaiter = new MyWaiterImpl();
 }
 
 public void serviceFood() {
  //点餐并付钱
  String food = myPayment.pay();
  //厨师烹饪
  myCook.cooking(food);
  //服务员上餐
  myWaiter.service(food);
 }
}

 

8.

package com.lanp.facade;

/**
 * 客户类
 * @author LanP
 * @version v1.0
 */
public class MyCustomer {
 public void haveDinner() {
  new MyFacade().serviceFood();
 }
 
 public static void main(String[] args) {
  new MyCustomer().haveDinner();
 }
}

 

原创粉丝点击