java设计模式工厂模式

Facade Design Pattern is one of the Structural design patterns (such as Adapter pattern and Decorator pattern). Facade design pattern is used to help client applications to easily interact with the system.

外观设计模式是“ 结构”设计模式之一 (例如Adapter模式和Decorator模式 )。 外观设计模式用于帮助客户端应用程序轻松与系统进行交互。

立面设计模式 (Facade Design Pattern)

According to GoF Facade design pattern is:

根据GoF Facade的设计模式是:

Provide a unified interface to a set of interfaces in a subsystem. Facade Pattern defines a higher-level interface that makes the subsystem easier to use.

为子系统中的一组接口提供统一的接口。 外观模式定义了一个更高级别的接口,该接口使子系统更易于使用。

Suppose we have an application with set of interfaces to use MySql/Oracle database and to generate different types of reports, such as HTML report, PDF report etc.

假设我们有一个带有一组接口的应用程序,以使用MySql / Oracle数据库并生成不同类型的报告,例如HTML报告,PDF报告等。

So we will have different set of interfaces to work with different types of database. Now a client application can use these interfaces to get the required database connection and generate reports.

因此,我们将使用不同的接口集来处理不同类型的数据库。 现在,客户端应用程序可以使用这些接口来获取所需的数据库连接并生成报告。

But when the complexity increases or the interface behavior names are confusing, client application will find it difficult to manage it.

但是,当复杂性增加或接口行为名称令人困惑时,客户端应用程序将发现很难对其进行管理。

So we can apply Facade design pattern here and provide a wrapper interface on top of the existing interface to help client application.

因此,我们可以在此处应用Facade设计模式,并在现有接口之上提供包装器接口,以帮助客户端应用程序。

立面设计模式–接口集 (Facade Design Pattern – Set of Interfaces)

We can have two helper interfaces, namely MySqlHelper and OracleHelper.

我们可以有两个辅助接口,即MySqlHelperOracleHelper

package com.journaldev.design.facade;import java.sql.Connection;public class MySqlHelper {public static Connection getMySqlDBConnection(){//get MySql DB connection using connection parametersreturn null;}public void generateMySqlPDFReport(String tableName, Connection con){//get data from table and generate pdf report}public void generateMySqlHTMLReport(String tableName, Connection con){//get data from table and generate pdf report}
}
package com.journaldev.design.facade;import java.sql.Connection;public class OracleHelper {public static Connection getOracleDBConnection(){//get Oracle DB connection using connection parametersreturn null;}public void generateOraclePDFReport(String tableName, Connection con){//get data from table and generate pdf report}public void generateOracleHTMLReport(String tableName, Connection con){//get data from table and generate pdf report}}

外观设计模式界面 (Facade Design Pattern Interface)

We can create a Facade pattern interface like below. Notice the use of Java Enum for type safety.

我们可以创建一个Facade模式界面,如下所示。 注意将Java Enum用于类型安全。

package com.journaldev.design.facade;import java.sql.Connection;public class HelperFacade {public static void generateReport(DBTypes dbType, ReportTypes reportType, String tableName){Connection con = null;switch (dbType){case MYSQL: con = MySqlHelper.getMySqlDBConnection();MySqlHelper mySqlHelper = new MySqlHelper();switch(reportType){case HTML:mySqlHelper.generateMySqlHTMLReport(tableName, con);break;case PDF:mySqlHelper.generateMySqlPDFReport(tableName, con);break;}break;case ORACLE: con = OracleHelper.getOracleDBConnection();OracleHelper oracleHelper = new OracleHelper();switch(reportType){case HTML:oracleHelper.generateOracleHTMLReport(tableName, con);break;case PDF:oracleHelper.generateOraclePDFReport(tableName, con);break;}break;}}public static enum DBTypes{MYSQL,ORACLE;}public static enum ReportTypes{HTML,PDF;}
}

外观设计模式客户程序 (Facade Design Pattern Client Program)

Now lets see client code without using Facade pattern and using Facade pattern interface.

现在让我们在不使用Facade模式和Facade模式界面的情况下查看客户端代码。

package com.journaldev.design.test;import java.sql.Connection;import com.journaldev.design.facade.HelperFacade;
import com.journaldev.design.facade.MySqlHelper;
import com.journaldev.design.facade.OracleHelper;public class FacadePatternTest {public static void main(String[] args) {String tableName="Employee";//generating MySql HTML report and Oracle PDF report without using FacadeConnection con = MySqlHelper.getMySqlDBConnection();MySqlHelper mySqlHelper = new MySqlHelper();mySqlHelper.generateMySqlHTMLReport(tableName, con);Connection con1 = OracleHelper.getOracleDBConnection();OracleHelper oracleHelper = new OracleHelper();oracleHelper.generateOraclePDFReport(tableName, con1);//generating MySql HTML report and Oracle PDF report using FacadeHelperFacade.generateReport(HelperFacade.DBTypes.MYSQL, HelperFacade.ReportTypes.HTML, tableName);HelperFacade.generateReport(HelperFacade.DBTypes.ORACLE, HelperFacade.ReportTypes.PDF, tableName);}}

As you can see that using Facade pattern interface is a lot easier and cleaner way to avoid having a lot of logic at client side. JDBC Driver Manager class to get the database connection is a wonderful example of facade design pattern.

如您所见,使用Facade模式界面是一种避免客户端逻辑过多的简便方法。 获得数据库连接的JDBC Driver Manager类是外观设计模式的一个很好的例子。

立面设计模式要点 (Facade Design Pattern Important Points)

  • Facade design pattern is more like a helper for client applications, it doesn’t hide subsystem interfaces from the client. Whether to use Facade or not is completely dependent on client code.外观设计模式更像是客户端应用程序的助手,它不会对客户端隐藏子系统接口。 是否使用Facade完全取决于客户端代码。
  • Facade design pattern can be applied at any point of development, usually when the number of interfaces grow and system gets complex.门面设计模式可以应用于任何开发点,通常是在接口数量增加和系统变得复杂时使用。
  • Subsystem interfaces are not aware of Facade and they shouldn’t have any reference of the Facade interface.子系统接口不了解Facade,因此不应具有Facade接口的任何引用。
  • Facade design pattern should be applied for similar kind of interfaces, its purpose is to provide a single interface rather than multiple interfaces that does the similar kind of jobs.外立面设计模式应应用于相似类型的接口,其目的是提供一个单一的接口,而不是提供多个执行相似类型工作的接口。
  • We can use Factory pattern with Facade to provide better interface to client systems.我们可以将Factory模式与Facade结合使用,以提供与客户端系统更好的接口。

Thats all for Facade design pattern, stay tuned for more design pattern articles.

java设计模式工厂模式_Java中的外观设计模式相关推荐

  1. java设计模式工厂模式_Java中的复合设计模式

    java设计模式工厂模式 Composite pattern is one of the Structural design pattern. Composite design pattern is ...

  2. java设计模式工厂模式_Java中的桥梁设计模式

    java设计模式工厂模式 Today we will look into Bridge Design Pattern in java. When we have interface hierarchi ...

  3. java设计模式 订阅模式_Java中的外观设计模式

    java设计模式 订阅模式 立面是指建筑物的外观. 当穿过街道时,我们所看到的只是建筑物的外观. 该工作面抽象了建筑物的所有复杂实现细节. 同样, 外观设计模式旨在为子系统中的一组接口提供统一的接口. ...

  4. java设计模式工厂模式_Java中的工厂设计模式

    java设计模式工厂模式 Welcome to the Factory Design Pattern in Java tutorial. Factory Pattern is one of the C ...

  5. java设计模式代理模式_Java中的代理设计模式

    java设计模式代理模式 代理对象或代理对象为另一个对象提供占位符,以控制对该对象的访问. 代理充当原始对象的轻量级版本或简化版本. 它支持与原始对象相同的操作,但可以将那些请求委托给原始对象以实现它 ...

  6. java设计模式 订阅模式_Java中的复合设计模式

    java设计模式 订阅模式 当我们必须使用对象的树状分层结构时,复合设计模式非常有用. 它使我们能够统一对待单个对象和对象组成. 它属于结构设计模式的范畴,因为它将对象组合成树形结构以表示部分整个层次 ...

  7. java设计模式迭代器模式_Java中的迭代器设计模式–示例教程

    java设计模式迭代器模式 迭代器模式是一种行为模式,它用于提供遍历一组对象的标准方式. Iterator模式在Java Collection Framework中得到了广泛使用,其中Iterator ...

  8. java设计模式迭代器模式_Java中的迭代器设计模式

    java设计模式迭代器模式 Iterator design pattern in one of the behavioral pattern. Iterator pattern is used to ...

  9. java简单工厂模式_Java 简单工厂模式

    Java 简单工厂模式 2014-05-28·WeaponX 3717 次浏览 ## 介绍 简单工厂模式又称静态工厂模式. 简单工厂模式由工厂类角色.抽象产品角色和具体产品角色组成. 工厂类角色是本模 ...

最新文章

  1. python3精要(43)--变量注释
  2. freeswitch 发update sip消息_【PDA】SIP中生物学确认
  3. 反思响应json字符串的优化写法
  4. 回文字符串—回文子串—中心扩散法
  5. Angular core.js executeTemplate
  6. fatal: unable to access ‘https://github.comxxxxxxxxxxx‘: Failed to connect to xxxxxxxxxxxxx
  7. bat获取命令返回值_redis中list和hash的基本命令和使用场景
  8. 移动端页面弹幕小Demo实例说明
  9. 二、jdk命令之javah命令(C Header and Stub File Generator)
  10. 数据库 课程设计 仓库管理系统
  11. 地平线谭洪贺:AI芯片怎么降功耗?从ISSCC2017说起
  12. 巴特沃斯数字低通滤波器的设计步骤
  13. 双边功率谱密度和单边功率谱密度_以高斯信号为例,计算幅度谱、相位谱、双边功率谱、双边功率谱密度、单边功率谱、单边功率谱密度。...
  14. 简单Java的商品模块功能
  15. C语言调用动态共享库
  16. 不同时代阶段的计算机,计算机发展的四个阶段和计算机时代的开始
  17. Android 颜色的半透明效果
  18. c语言strcpy两字符串长度不同,(C语言)自己写字符串操作函数(一)——strlen/strcpy/strcat/strcmp/st...
  19. KISSY基础篇乄KISSY之HelloWorld
  20. 亚马逊苹果手机数据爬取

热门文章

  1. SWT: 发起事件 post event
  2. 法拉利杀手Koenigsegg CCX
  3. [转载] Python学习(五)Numpy通用函数汇总
  4. [转载] Python算法
  5. FPGA中数的表示方法
  6. Linux中的nc测试端口是否开放
  7. 【计算机视觉-从入门到精通系列】 第一章 基础知识
  8. 数据结构笔记(二十二)--已知先序中序求树
  9. c++访问私有(private)成员变量的常用方法
  10. c语言中char buffer,C语言对char*的封装,形成buffer