当前位置: 首页 > news >正文

做网站用的到minitab么/百度如何收录网站

做网站用的到minitab么,百度如何收录网站,做什网站好,做猎头可以在哪些网站注册随着系统的不断改进和开发的深入,它们会变得越来越复杂,系统会生成大量的类,这使得程序更难被理解。门面模式可谓这些类提供一个简化的接口,从而简化访问这些类的复杂性,有时候这种简化可能降低访问这些底层累的灵活性…

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

门面(Facade)模式也被称为正面模式、外观模式,这种模式用于将一组复杂的类包装到一个简单的外部接口中。

现在考虑这样的场景:我们有一个顾客需要到饭店用餐,这就需要定义一个Customer类,并为该类定义一个haveDinner方法。假设该饭店有三个部门:收银部、厨师部和服务生部,用户就餐需要这三个部门协调才能完成。本示例程序先定义一个收银部,用户需要调用该部门的pay方法:

public class PaymentImpl implements Payment {

public String pay(double price) {

String food = "快餐";

System.out.println("您已付款:" + price + "元,购买的是:" + food);

return food;

}

}

接下来定义厨师部门:

public class CookImpl implements Cook {

public String cook(String food) {

System.out.println("厨师正在烹调:" + food);

}

}

服务生部门:

public class WaiterImpl implements Waiter {

public void serve(String food) {

System.out.println("服务员正在端菜:" + food);

}

}

接下来实现Customer类的haveDinner方法:

public class Customer {

public void haveDinner() {

//依次创建三个部门

Payment payment = new PaymentImpl();

Cook cook = new CookImpl();

Waiter waiter = new WaiterImpl();

//依次调用三个部门的不同方法

String food = payment.pay();

cook.cook(food);

waiter.serve(food);

//直接依赖于Facade类来实现用餐方法

Facade f = new Facade();

f.serveFood();

}

}

正如上面的代码所示,Customer需要依次调用三个部门的方法才能完成这个haveDinner方法,实际上,如果这个饭店有更多的部门,那么程序就需要调用更多部门的方法来实现这个haveDinner方法——这就会增加haveDinner方法的实现难度了。

为了解决这个问题,我们可以为Payment、Cook、Waiter三个部门提供一个门面(Facade),使用Facade来包装这些类,对外提供一个简单的访问方法:

public class Facade() {

//定义被封装的三个部门

Payment payment;

Cook cook;

Waiter waiter;

//构造函数

public Facade(Payment payment, Cook cook, Waiter waiter) {

this.payment = payment;

this.cook = cook;

this.waiter = waiter;

}

public void serveFood() {

String food = payment.pay();

cook.cook(food);

waiter.serve(food);

}

}

从Facade代码可以看出,该门面保证了Payment,Cook和Waiter三个部门,程序对外提供了一个简单的serveFood方法,该方法对外提供了一个用餐的方法,而底层则依赖于三个部门的pay(),cook(),serve()三个方法。一旦程序提供了这个门面类Facade后,Customer类实现haveDinner方法就变得更加简单了,下面是通过Facade类实现的haveDinner方法:

public void haveDinner() {

Facade f = new Facade();

f.serveFood();

}

从上面的结构可以看出,如果不采用门面模式,客户端需要自行决定需要调用哪些类、哪些方法,并需要按合理的顺序来调用它们才能实现所需的功能。不采用门面模式时,程序有如图所示的结构:

ae7f993b87e1a4e9cd377a5112a5c3f0.png

然而,使用了门面模式之后,客户端代码只需要和门面类进行交互即可,于是,程序结构图变成了如下样式:

a66392abb4f6305c22efc0927a6fbfc4.png

其实,Spring的HibernateTemplate类就是使用的门面模式:当我们的程序使用Hibernate的find()方法时,程序只要一行代码即可得到查询返回的List。但实际上该find()方法后隐藏了如下代码:

Session session = sf.openSession();

Query query = session.createQuery(hql);

for(int i=0; i

query.setParameter(i, args[i]);

}

query.list();

因此我们可以认为HibernateTemplate是SessionFactory,Session、Query等类的门面。当客户端程序需要进行持久化查询时,程序无需调用这些类,而是直接调用HibernateTemplate门面类中的相印方法即可。

除此之外,JavaEE应用里使用业务逻辑组件来封装DAO组件也是典型的门面模式——每个业务逻辑组件(一般是Service层)都是众多DAO组件的门面,系统的控制器类无需直接访问DAO组件,而是由业务逻辑方法来组合多个DAO方法以完成所需功能。而Action只需与业务逻辑组件交互即可。

http://www.jmfq.cn/news/4873897.html

相关文章:

  • 怎样用别人的网站做修改病句/站长之家域名查询排行
  • 大型门户网站建设美丽/百度网站优化培训
  • 推荐几个没封的网站/优化近义词
  • wordpress 首页 函数/站群seo
  • 做任务赚钱网站官网/seo最新教程
  • 如何做繁体字网站/网络营销的基本职能
  • 重庆巴南网站建设/营销推广计划
  • wordpress 管理登录/seo百度排名优化
  • 福州企业高端网站建设制作哪家好/小学生摘抄新闻
  • 西宁手机网站建设/seo服务外包费用
  • 推荐商城网站建设/网站统计工具有哪些
  • 怎么收录网站/网站页面优化方案
  • 泰安做网站公司/免费二级域名分发网站源码
  • zblog 网站源码/杭州专业seo服务公司
  • c 网站开发案例详解百度云/爱链工具
  • 手机网站 php/阿里云云服务平台
  • 勒索做钓鱼网站的人/百度软文推广怎么做
  • 做视频网站需要哪些证/百度知道官网入口
  • 兰州学校网站建设/百度seo技术
  • 做网站宝鸡/最新新闻国内大事件
  • 做变态手术视频网站/聊城seo优化
  • 成都网站建设sntuu/搜索引擎技术基础
  • 女装网站建设规划书怎么写/长沙网站推广有哪些啊
  • 网站建设选择什么系统好/湖南好搜公司seo
  • 台州建设局网站信息价/亚马逊跨境电商开店流程及费用
  • 在建工程/广州seo优化排名推广
  • 那个网站教宝妈做辅食/seo外包 杭州
  • 品牌推广网站怎么做/网站空间租用
  • 深圳网站建设antnw/seo网站系统
  • 生物医药基地网站建设/品牌推广软文