- 浏览: 138336 次
- 性别:
- 来自: 苏州
文章分类
最新评论
-
yaoweinan:
没有.....
Itext 5.4.0 生成PDF中文不报错,Adobe 不显示 -
马文涛:
我也发现这个问题了,你找到解决办法了吗?
Itext 5.4.0 生成PDF中文不报错,Adobe 不显示 -
coding1688:
博主辛苦了,也可以参考一下这篇文章:四步轻松搞定瀑布流布局ht ...
瀑布流布局个人实现 -
yaoweinan:
嘿嘿,那个只是最笨的办法,实际上是不行的,现在一般的都有sw ...
文件上传(无刷新,带进度条,带网速)下载完整 -
javazzu:
我为啥不行呢
文件上传(无刷新,带进度条,带网速)下载完整
门面模式(Facade Pattern):门面模式在我个人感觉就是对使用者提供一个共同的外部调用方法,而把一些比较繁琐,或者使用者不必知道的东西不给使用者知道,换言之就是给你提供一个服务或者方法告诉你能干啥,其他的事情全部由内部程序搞定,在表面上达到统一、简易的操作。
下面举例说明:
现在网上购物已经十分流行了,在网购过程之中,我们首先需要选购商品,将物品添加到购物车,然后填写收货地址信息,最后进行网银付款,每次都要这么做,每次都是同一套流程。
现在假设我们有一个平台的商品都是统一的,质量不会存在啥问题,那么我们设想将网购这一复杂的过程简化,构建一更加简单的系统进行网购。客户主要提供给虚拟货币、收货地址、购买物品,将由我们设想的系统为客户筛选最便宜的物品,填写收货信息,结算、付款,这给客户带来了很大的方便,客户也不必知道自己真正的购物过程,只需要提供相应的信息就可以了。
实际代码如下:
网购流程接口:
package j2se.pattern; import java.util.List; /** * 网购流程 * @author Lyon Yao * */ public interface NetShoppingProcess { /** * 选取商品 * @param basket */ public void chooceGoods(List<Object> goods); /** * 填写收货人信息 * @param address * @param post * @param name */ public void fillInReceiveAddress(String address,String post,String name); /** * 付钱 * @param count * @return float */ public float payForGoods(float count); }
网购过程实现:
package j2se.pattern; import java.util.List; /** * @author Lyon Yao * */ public class NetShoppingProcessImpl implements NetShoppingProcess { private float totalCount=0.0f; private Basket basket=new Basket(); @Override public void chooceGoods(List<Object> goods) { // TODO Auto-generated method stub for(Object o:goods){ //system find your goods On InterNet //suppose this 'o' is system found good this.basket.addGood(o); } System.out.println("goods are selected!"); } @Override public void fillInReceiveAddress(String address, String post, String name) { // TODO Auto-generated method stub System.out.println("filling information about receiver!"); } @Override public float payForGoods(float count) { // TODO Auto-generated method stub System.out.println("count total pay!"); this.totalCount=1.1f;//假设物品总共1.1RMB float surplus= count-this.totalCount; System.out.println("pay for your goods!"); return surplus; } }
购物车:
package j2se.pattern; import java.util.ArrayList; import java.util.List; /** * 购物车 * @author Lyon Yao * */ public class Basket { private List<Object> goods=new ArrayList<Object>(0); /** * 列出购物车内所有的东西 * @return */ public List<Object> listGood(){ return this.goods; } /** * 添加物品 * @param object */ public void addGood(Object object){ this.goods.add(object); } /** * 删除物品 * @param object */ public void deleteGood(Object object){ this.goods.remove(object); } }
我们提供服务的实现:
package j2se.pattern; import java.util.List; /** * 模式化购物 * @author Lyon Yao * */ public class ModenNetShopping { private NetShoppingProcess process=new NetShoppingProcessImpl(); public String netShopping(List<Object> toBuy,String address,String post,String name,float yourMoney){ String msg=""; this.process.chooceGoods(toBuy); this.process.fillInReceiveAddress(address, post, name); float surplus=process.payForGoods(yourMoney); if(surplus==0){ msg="your money is just right for your goods!"; }else if(surplus<0){ msg="your moeny is not enough,please compensate "+Math.abs(surplus)+"RMB"; }else { msg="your moeny is so enough,system hava restituted you "+Math.abs(surplus)+"RMB"; } return msg; } }
模拟人:
package j2se.pattern; import java.util.ArrayList; import java.util.List; /** * * @author Lyon Yao * */ public class Person { private String name; private String address; private String post; private float money=200.00f; public Person(String name, String address, String post) { super(); this.name = name; this.address = address; this.post = post; } /** * 购物 */ public void Shopping(){ List<Object> goods=new ArrayList<Object>(); Object o=new Object(); goods.add(o); ModenNetShopping sh=new ModenNetShopping(); System.out.println(sh.netShopping(goods, address, post, name, money)); } }
测试类:
package j2se.pattern; import org.junit.Test; public class TestCase { @Test public void test(){ Person p=new Person("Lyon","ShanXi XiAn,China","710300"); p.Shopping(); } }
这样不管哪一个人进行网上购物,都是一个简单的过程,很多东西都不必关心。
另外将设我们平台要对服务者进行一些检查,或者限制,譬如说不让Lyon使用该平台购物,那么我们只需做如下改动。
检查接口:
package j2se.pattern; /** * 检查 * @author Lyon Yao * */ public interface Check { public boolean checkName(String name); }
检查实现:
package j2se.pattern; public class CheckImpl implements Check { @Override public boolean checkName(String name) { // TODO Auto-generated method stub // check the name if(name.equals("Lyon")){ return true; }else{ return false; } } }
修改类ModenNetShopping如下:
package j2se.pattern; import java.util.List; /** * 模式化购物 * @author Lyon Yao * */ public class ModenNetShopping { private NetShoppingProcess process=new NetShoppingProcessImpl(); private Check check=new CheckImpl(); public String netShopping(List<Object> toBuy,String address,String post,String name,float yourMoney){ String msg=""; if(check.checkName(name)){ return "so sorry,we can't service for you!"; } this.process.chooceGoods(toBuy); this.process.fillInReceiveAddress(address, post, name); float surplus=process.payForGoods(yourMoney); if(surplus==0){ msg="your money is just right for your goods!"; }else if(surplus<0){ msg="your moeny is not enough,please compensate "+Math.abs(surplus)+"RMB"; }else { msg="your moeny is so enough,system hava restituted you "+Math.abs(surplus)+"RMB"; } return msg; } }
这样以来,对于Person来说购物还是和原来一模一样,但结果却不尽相同了。
发表评论
-
写自己的框架,让别人笑掉大牙吧(IOC2)
2013-04-22 14:23 902上篇中主要使用配置文件来定义一些类实例之间的组织关系 ... -
关于java中对象属性值的校验的思考
2013-04-15 14:09 1557现在在java 开发中经常会遇到要交验某个obje ... -
java 动态编译及执行实现Web式java开发
2012-11-29 17:05 923废话不说,让大家等了这么久,先看看截图 : 编译 ... -
JXLayer 使用简单介绍
2012-11-01 17:25 1320JXLayer 是一个很好的Swing 控件装饰类库,其主要要 ... -
关于Jtextinpt 内容的限制
2012-09-28 15:00 812在JTextInput 限制输入内容,这个一般的通过按键输入进 ... -
构造中的多态
2012-08-25 23:19 857各位仁兄,前几日我在 ... -
Swing JtableModel 使用之旅
2012-07-29 03:25 1031JTable 是我们一般展示数据的一个很好的Grid组建,个人 ... -
模版模式(TemplatePattern)
2012-07-15 11:08 797模版模式分为2个部分 1.抽象模版 2.具体模版 ... -
适配器模式(Adapter Pattern)
2012-07-08 22:49 886适配器模式是就和现实一个样子,给你一个电脑适配器,它就能 ... -
代理模式例子
2012-06-04 15:07 988代理模式简单点就和现实中一样,只是代理实质性的还是别人在做。比 ... -
策略模式应对旅行中出现的问题
2012-06-04 14:21 887策略模式是针对在进行过程中出现一些问题的应对模式。一般可以分为 ... -
java 工厂模式简单介绍及例子
2012-06-03 23:16 1066java中工厂模式在java ee中经常碰见,是一种常见的模式 ... -
java 动态代理及自定义标注使用例子
2012-06-03 00:14 1237java中动态代理,在实际应用中有着很大的作用,譬如在一些类似 ... -
flex3 socket+java
2012-02-06 12:10 1090首先解决的问题是flex的沙箱问题,由于flex 连接服务器存 ... -
java 自定义注解
2012-01-30 16:09 835写道 package com.my;import j ... -
图片裁剪,缩放 批处理
2012-01-07 15:25 1024package dwr.demo; import ... -
java System.Properties
2011-10-26 13:19 749使用Properties.getProperty方法的参数也可 ... -
JDK自带的实用工具native2ascii.exe
2011-10-26 09:21 842在做Java开发的时候, ... -
dom4j xml 简单操作
2011-10-24 11:02 722package com.my.until; import j ... -
装饰模式例子(模仿修改船只用途)
2011-08-28 20:31 722模仿一次出海旅行中船只的用途的动态调整 功能 写道 pac ...
相关推荐
门面模式(Facade Pattern)是软件工程中一种常用的结构型设计模式,它的主要目的是提供一个统一的接口,用来简化系统中一组复杂的接口或类的使用。这个模式将复杂的子系统接口封装在一个简单的门面对象中,使得...
7、门面模式FACADE PATTERN 8、适配器模式ADAPTER PATTERN 9、模板方法模式TEMPLATE METHOD PATTERN 10、建造者模式BUILDER PATTERN 11、桥梁模式BRIDGE PATTERN 12、命令模式COMMAND PATTERN 13、装饰模式...
门面模式(Facade Pattern)是一种设计模式,它在软件工程中扮演着简化复杂系统接口的角色。当一个系统或子系统包含大量类,并且客户端需要与这些类进行交互时,门面模式可以提供一个高层次的单一接口,使得客户端的...
### C++设计模式之门面模式(Facade Pattern) #### 一、门面模式概述 在软件工程领域,设计模式是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易...
外观模式(Facade Pattern)是设计模式中的一种结构型模式,其主要目的是为了简化客户端与复杂系统之间的交互。在C#编程中,外观模式通常用于减少客户端对子系统组件的依赖,提供一个统一的、高层次的接口,使得...
门面模式(Facade Pattern)是一种结构型设计模式,它的主要目的是为复杂的子系统提供一个统一且简单的接口,使得客户端能够更方便地与这些子系统交互,而无需了解子系统的内部实现细节。这种模式降低了客户端与子...
门面模式(Facade Pattern)是一种设计模式,它的主要目的是为了解决复杂系统中各个子系统的交互问题,提供一个简单的统一接口,使得客户端可以更轻松地使用这些子系统。这种模式在PHP开发中非常常见,特别是在处理...
门面模式(Facade Pattern)是软件工程中一种常用的设计模式,属于结构型模式。它提供了一个统一的接口,用来访问子系统中的一群接口。门面模式使得子系统的使用更为简单,同时也隐藏了子系统的复杂性,使得客户端...
门面模式(Facade Pattern)是软件工程中一种常用的设计模式,属于结构型模式。它为一个复杂的子系统提供了一个统一的接口,使得客户端可以更容易地使用这个子系统,而无需了解其内部的具体实现细节。在实际开发中,...
门面模式(Facade Pattern)是一种设计模式,属于结构型模式,它的主要目的是为了解耦复杂的系统,提供一个统一的入口,使得外部客户端可以更简单、更方便地与系统交互,而无需关注系统的内部实现细节。在门面模式中...
门面模式(Facade Pattern)是设计模式中的一种结构型模式,它的主要目的是为了解决复杂的系统接口提供一个简单易用的统一入口。在Java中,门面模式的应用可以帮助我们更好地组织代码,降低系统的耦合度,提高代码的...
门面模式(Facade Pattern)是一种结构型设计模式,它的主要目的是提供一个统一的接口,用来访问子系统中的一组接口。这个接口使得子系统更容易使用,同时也减少了客户端代码与子系统之间的耦合。门面模式通常用于...
门面模式(Facade Pattern)是一种设计模式,它在软件工程中扮演着简化复杂系统接口的角色。门面模式的核心思想是为一个复杂的子系统提供一个单一、简洁的接口,使得客户端可以更容易地理解和使用该子系统,而无需...
门面模式(Facade Pattern)是软件工程中一种常用的设计模式,属于结构型模式,它提供了一个统一的接口,用于访问子系统中的一组接口。在面向对象设计中,门面模式为子系统提供了更简单的接口,使得客户端可以更容易...
门面模式(Facade Pattern)是一种结构型设计模式,它的主要目的是提供一个统一的接口,用于客户端访问复杂的子系统。在大型软件系统中,通常会有很多个子系统,每个子系统都有自己的职责,而门面模式就是为了让...
门面模式【FACADE PATTERN】 适配器模式【ADAPTER PATTERN】 模板方法模式【TEMPLATE METHOD PATTERN】 建造者模式【BUILDER PATTERN】 桥梁模式【BRIDGE PATTERN】 命令模式【COMMAND PATTERN...
门面模式(Facade Pattern)是软件工程中一种结构型设计模式,它提供了一个统一的接口,用来访问子系统中的一组接口。这个统一的接口使得客户端不必了解子系统内部的复杂性,只需要与门面进行交互即可。门面模式简化...