装饰者模式介绍
来源:互联网 发布:什么写作软件好 编辑:程序博客网 时间:2024/06/07 09:42
门面模式是对象的结构模式,外部与一个子系统的通信必须通过一个统一的门面对象进行。门面模式提供一个高层次的接口,使得子系统更易于使用。
门面模式有三个角色组成:
1) 门面角色( facade ):这是门面模式的核心。它被客户角色调用,因此它熟悉子系统的功能。它内部根据客户角色已有的需求预定了几种功能组合。
2) 子系统角色:实现了子系统的功能。对它而言, façade 角色就和客户角色一样是未知的,它没有任何 façade 角色的信息和链接。
3) 客户角色:调用 façade 角色来完成要得到的功能
以医院的例子进行说明:病人人去医院看病,先得挂号,然后在去门诊,在去划价,然后在去取药(完整的流程执行这些过程),其中门诊,挂号,划价,取药就是各个子系统,用户在各个子系统中进行来回使用,想到的不方面,病人最终目的就是给一些取药的信息,然后拿到药就OK,不需要去各个子系统中进行调用。于是引用门面模式。
门面模式的设计图如下:
子系统设计模块如下:
package com.lgy.design;public enum Hospital {Outpatient {@Overridepublic void doAction() {System.out.println("门诊");}},Register {@Overridepublic void doAction() {System.out.println("挂号");}},Price {@Overridepublic void doAction() {System.out.println("取价");}},Take {@Overridepublic void doAction() {System.out.println("取药");}}; public abstract void doAction();}
门面核心类设计如下,一般门面核心类是单例模式:
package com.lgy.design;public class HospitalFacade {private HospitalFacade() {}private static class SingletonHolder {private static final HospitalFacade INSTANCE = new HospitalFacade();}public static HospitalFacade getInstance() {return SingletonHolder.INSTANCE;}public void TakeDrug() {Hospital.Outpatient.doAction();Hospital.Register.doAction();Hospital.Price.doAction();Hospital.Take.doAction();}}
客户端类调用如下:
package com.lgy.design;public class PatientA {public static void main(String[] args) {HospitalFacade hospitalFacade = HospitalFacade.getInstance();hospitalFacade.TakeDrug();}}
门面模式的优点:
1.松耦合度
门面模式松散了客户端与子系统的耦合关系,让子系统内部的模块能更容易扩展和维护。
2.简单运用
门面模式让子系统更加易用,客户端不再需要了解子系统内部的实现,也不需要跟众多子系统内部的模块进行交互,只需要跟门面类交互就可以了。
3.更好的划分访问层次
通过合理使用Facade,可以帮助我们更好地划分访问的层次。有些方法是对系统外的,有些方法是系统内部使用的。把需要暴露给外部的功能集中到门面中,这样既方便客户端使用,也很好地隐藏了内部的细节。
- 装饰者模式介绍
- 装饰模式 介绍
- 装饰者模式(Decorator Pattern)(一):装饰者模式介绍
- Android装饰者模式介绍(结合源码分析)
- 设计模式——代理模式介绍及与装饰者模式的区别
- 装饰者模式(Derector)
- 装饰者模式
- Decorator 装饰者模式
- 装饰者设计模式
- 装饰者模式
- 装饰者模式
- 装饰者模式
- 装饰者模式(Decorator)
- 装饰者模式
- 装饰者模式
- 装饰者模式
- 装饰者模式 DecoratorPattern
- 设计模式 - 装饰者
- 欢迎使用CSDN-markdown编辑器
- HDU2108(叉积判断凸多边形,凹多边形)
- socket连接和http连接的区别
- hdoj-2059
- 四种基本布局之二——RelativeLayout
- 装饰者模式介绍
- Number Sequence
- 单链表
- Linux IO模式及 select、poll、epoll详解
- C++中虚析构函数的作用
- wdcp安装
- debian 8环境安装freeswitch 1.6.9教程
- jquery 生成form 并提交,可用于jquery打开新窗口而不被屏蔽
- poj 2828 Buy Tickets