linkin大话设计模式--门面模式

随着系统的不断改进和开发,他们会变得越来越复杂,系统会生成大量的类,这使得程序的流程更加难以理解。门面模式可以为这些类提供一个简易的接口,从而简化访问这些类的复杂化,有时候这种简化可能会降低了程序底层类的灵活性,但除了要求特别苛刻的客户端之外,他通常可以提供所需要的全部功能,当然这些苛刻的用户任然可以直接访问底层的类和方法。



简单来讲,门面模式就是将一组负责的类包装到一个简单的外部的接口中。外部与一个子系统的通信必须通过一个统一的门面对象进行。

门面模式涉及两个角色:
门面角色:客户端可以调用这个角色的方法。此角色知道子系统的功能和责任。在正常情况下,本角色会将所有从客户端发来的请求委派到相应的子系统中去。
子系统角色:可以同时有一个或者多个子系统。每一个子系统都不是一个单独的类,而是一个类的集合。每个子系统都可以被客户端直接调用,或者被门面角色调用。

在什么情况下使用门面模式???
1.为一个复杂的子系统提供一个简单的接口
2.引入门面模式可以将一个子系统与他的客户端以及其他的子系统分离,可以提高子系统的独立性和可移植性
3.层次化结构,如果层与层之间是互相依赖的,那么引用门面模式可以向鼎他们仅仅通过门面进行通信,从而简化了层与层之间的依赖关系。



代码如下:

<strong><span style="font-size:14px;">//模拟客户端调用门面接口
public class Cutsomer { public static void haveDinner(String food){
Facede Facede = new Facede();
Facede.serveFood(food);
} public static void main(String[] args) {
Cutsomer.haveDinner("快餐");
}
} //门面
class Facede{
//将一套逻辑封装到了一起
private Payment payment;
private Cook cook;
private Waiter waiter; public Facede() {
super();
this.payment = new PaymentImpl();
this.cook = new CookImpl();
this.waiter = new WaiterImpl();
} public void serveFood(String food){
payment.pay(food);
cook.cook(food);
waiter.serve(food);
} } //收银部接口
interface Payment{
public String pay(String food);
} //厨师部门接口
interface Cook{
public String cook(String food);
} //服务生部门
interface Waiter{
public void serve(String food);
} class PaymentImpl implements Payment{ @Override
public String pay(String food) {
System.out.println("您已经交了钱了,你购买的事物是..."+food);
return food;
} } class CookImpl implements Cook{ @Override
public String cook(String food) {
System.out.println("厨师正在做饭呢..."+food);
return food;
} } class WaiterImpl implements Waiter{ @Override
public void serve(String food) {
System.out.println("服务员已经将..."+food+"端上来了,慢慢吃吧...");
} } </span></strong>







































linkin大话设计模式--门面模式的更多相关文章

  1. linkin大话设计模式--常用模式总结

    linkin大话设计模式--常用模式总结 一,常用设计模式定义 Abstract Factory(抽象工厂模式):提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类. Adapter( ...

  2. linkin大话设计模式--建造模式

    linkin大话设计模式--建造模式 建造模式是对象的创建模式,可以讲一个产品的内部表象与产品的生成过程分割开来,从而可以使一个建造过程生成具有不同的内部表象的产品对象. 建造模式的结构: 抽象建造者 ...

  3. linkin大话设计模式--模板方法模式

    linkin大话设计模式--模板方法模式 准备一个抽象类,将部分逻辑以具体方法的形式实现,然后申明一些抽象方法来迫使子类实现剩余的逻辑.不同的子类可以以不同的方式实现这些抽象方法,从而对剩余的逻辑有不 ...

  4. linkin大话设计模式--桥接模式

    linkin大话设计模式--桥接模式 桥接模式是一种结构化模式,他主要应对的是:由于实际的需要,某个类具有2个或者2个以上维度的变化,如果只是使用继承将无法实现功能,或者会使得设计变得相当的臃肿.我们 ...

  5. linkin大话设计模式--策略模式

    linkin大话设计模式--策略模式 Strategy [ˈstrætədʒi]  策略 策略模式用于封装系列的算法,这些算法通常被封装在一个称为Context的类中,客户端程序可以自由的选择任何一种 ...

  6. linkin大话设计模式--命令模式

    linkin大话设计模式--命令模式 首先考虑一种应用情况,某个方法需要完成某一个功能,这个功能的大部分功能已经确定了,但是有可能少量的步骤没法确定,必须等到执行这个方法才可以确定. 也就是说,我们写 ...

  7. linkin大话设计模式--代理模式

    代理模式是一种应用非常广泛的设计模式,当客户端代码需要调用某个对象的时候,客户端并不关心是否可以准确的得到这个对象,他只要一个能够提供该功能的对象而已,此时我们就可以返回该对象的代理.总而言之,客户端 ...

  8. linkin大话设计模式--单例模式

    linkin大话设计模式 开文前先弱弱的问一句:什么是设计模式?我在研究java2ee的时候有研究过,在学js的时候也有看到.设计模式的概念最早源于建筑设计大师<建筑的永恒算法>一书,它表 ...

  9. linkin大话设计模式--抽象工厂

    linkin大话设计模式--抽象工厂 在前面讲到的简单工厂里面虽然实现了我们那个类和其中的依赖的解耦,但是在产生我们需要的依赖的那个工厂里面还是和具体的产品类耦合了  现在要是还想彻底解耦的话怎么办呢 ...

随机推荐

  1. Django--进阶--中间件的使用

    - 中间件是什么? 中间件是一个钩子框架,它们可以介入Django 的请求和响应处理过程.它是一个轻量级.底层的“插件”系统,用于在全局修改Django 的输入或输出. 每个中间件组件负责完成某个特定 ...

  2. Zabbix实战-简易教程--动作(Actions)--触发器

    一.概述 我们通过接入agent,采集了大量数据,但是如果采集到的某个指标超出了我预计的范围(阈值),此时我们希望监控系统能够给予邮件或短信报警,触发器就是替你干这个活的. 触发器表达式允许定义一个什 ...

  3. windbg指定SOS版本,执行扩展命令报错

    调试dump文件,加载相匹配版本的sos/clr时,绝大多数都是可以正常使用的. 然而凡事都有例外,今天在做类似工作时,遇到了错误: CLRDLL: Consider using ".cor ...

  4. 【JavaScript声明变量的规则】

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  5. js面向对象学习笔记(一):创建空对象,理解this指向

    var obj = new Object();//创建一个空对象 obj.name = '小王';//属性 obj.sayName = function () { //对象方法 对象最重要的是this ...

  6. ProjectEuler 做题记录

    退役选手打发时间的PE计划 挂在这里主要是dalao们看到有什么想交流的东西可以私聊哦(站内信或邮箱吧)~~当然现在高三也不怎么能上网. 2017/8/11  595 :第一题QAQ 2017/8/1 ...

  7. BZOJ1078: [SCOI2008]斜堆

    题目:http://www.lydsy.com/JudgeOnline/problem.php?id=1078 每一次进入的点一定是一个极左节点,然后将它所处在的整棵树左右翻转.加上一些情况的处理. ...

  8. BZOJ 3106: [cqoi2013]棋盘游戏(对抗搜索)

    题目:http://www.lydsy.com/JudgeOnline/problem.php?id=3106 对抗搜索,f[x][y][a][b][c][d]表示当前谁走,走了几步,及位置. (因为 ...

  9. c语言基础学习02

    =============================================================================涉及到的知识点有:include有两种用法.{ ...

  10. mac android studio 出现 Error: SDK location not found. Define location with sdk.dir in the local.properties file or with an ANDROID_HOME environment variable.

      Error: SDK location not found. Define location with sdk.dir in the local.properties file or with a ...