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. EasyUI学习笔记---Datagrid真分页

    EasyUI Datagrid组件在我看来功能还是很强大的,在我使用过程中遇到分页请求的问题困扰了一天才解决,下面我就把我遇到的问题分享一下 //datagrid数据表格渲染 $("#dg& ...

  2. ElasticSearch 集群监控

    要监控哪些 ElasticSearch metrics? Elasticsearch 提供了大量的 Metric,可以帮助您检测到问题的迹象,在遇到节点不可用.out-of-memory.long g ...

  3. docker的相关使用

    1.docker ps 列出所有容器 2.docker images 查看docker镜像 3.docker run [OPTIONS] IMAGE [COMMAND] [ARG...] 运行容器 4 ...

  4. 【转】如何将qlv格式的腾讯视频转换为mp4格式

    一般来说,每个视频网站都会有自己的视频播放格式,如优酷的KUX.爱奇艺的QSV和腾讯的QLV等.但是大家知道,优酷是有转码功能的,而就目前来说腾讯视频还没有转码功能,这就给大家造成了一定的困扰.这里呢 ...

  5. 3DES加密

    本文介绍了3DES加密特性,加密特点,3DES是对称加密,用一个密钥对内容进行加密,必须使用相同的密钥进行解密, 密钥必须配置,而且长度为24位,不足24位,用0位进行补全,本文也顺带介绍了其它加密算 ...

  6. iframe标签里面的页面元素只读

    iframe标签里面的页面元素只读,可以通过设置一个只读的透明div进行遮罩实现. html代码: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1 ...

  7. 【JavaScript的五种基本数据类型及转换】

    js中有六种数据类型,包括五种基本数据类型(Number,String,Boolean,Null,Undefined),和一种混合数据类型就是特殊的(Object). "undefined& ...

  8. python写外网收集信息器

    简单化,知道IP去扫描ip import socket from socket import * a=input('请输入域名:') try: ip=gethostbyname(a) print('[ ...

  9. Windows系统下文件的概念及c语言对其的基本操作(乙)

  10. c#版 K线控件(Stock)

    K线起源于日本米市交易,它的基本用途就是为了寻找"买卖点".股市及期货市场中的K线图的画法包含四个数据,即开盘价.最高价.最低价.收盘价,所有的k线都是围绕这四个数据展开,反映大势 ...