经典的GOF设计模式笔记(5)
Singleton模式看起来简单,使用方法也很方便,但是真正用好,是非常不容易,需要对Java的类 线程 内存等概念有相当的了解。
总之:如果你的应用基于容器,那么Singleton模式少用或者不用,可以使用相关替代技术。
《===============戏说单例模式=================》
? 单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例
单例模式。
? 单例模式只应在有真正的“单一实例”的需求时才可使用。
? 俺有6个漂亮的老婆,她们的老公都是我,我就是我们家里的老公Sigleton,她们只
要说道“老公”,都是指的同一个人,那就是我(刚才做了个梦啦,哪有这么好的事)
12
东方标准 http://soft.oneedu.cn
5. 结构 / 门面模式(Facade)
Facade模式的定义: 为子系统中的一组接口提供一个一致的界面。 Facade一个典型应用就是数据库JDBC的应用,如下例对数据库的操作:
public class DBCompare { Connection conn = null;
PreparedStatement prep = null; ResultSet rset = null; try {
Class.forName( \
conn = DriverManager.getConnection( \
String sql = \ prep = conn.prepareStatement( sql ); prep.setString( 1, \ rset = prep.executeQuery(); if( rset.next() ) {
System.out.println( rset.getString( \ }
} catch( SException e ) { e.printStackTrace(); } finally {
rset.close(); prep.close(); conn.close(); } }
上例是Jsp中最通常的对数据库操作办法。
在应用中,经常需要对数据库操作,每次都写上述一段代码肯定比较麻烦,需要将其中不变的部分提炼出来,做成一个接口,这就引入了facade外观对象.如果以后我们更换Class.forName中的
我们做成了一个Facade接口,使用该接口,上例中的程序就可以更改如下: public class DBCompare {
String sql = \ try {
Mysql msql=new mysql(sql);
prep.setString( 1, \ rset = prep.executeQuery(); if( rset.next() ) {
System.out.println( rset.getString( \ }
} catch( SException e ) {
13
东方标准 http://soft.oneedu.cn
e.printStackTrace(); } finally {
mysql.close(); mysql=null; } }
可见非常简单,所有程序对数据库访问都是使用改接口,降低系统的复杂性,增加了灵活性. 如果我们要使用连接池,也只要针对facade接口修改就可以。
由上图可以看出, facade实际上是个理顺系统间关系,降低系统间耦合度的一个常用的办法,也许你已经不知不觉在使用,尽管不知道它就是fa?ade。
《===============戏说门面模式=================》
? 外部与一个子系统的通信必须通过一个统一的门面对象进行。门面模式提供一个高
层次的接口,使得子系统更易于使用。每一个子系统只有一个门面类,而且此门面类只有一个实例,也就是说它是一个单例模式。但整个系统可以有多个门面类。 ? 我有一个专业的Nikon相机,我就喜欢自己手动调光圈、快门,这样照出来的照片
才专业,但MM可不懂这些,教了半天也不会。幸好相机有Facade设计模式,把相机调整到自动档,只要对准目标按快门就行了,一切由相机自动调整,这样MM也可以用这个相机给我拍张照片了。
14
东方标准 http://soft.oneedu.cn
6.结构 / 代理模式(Proxy)
定义: 为其他对象提供一种代理以控制对这个对象的访问。
理解并使用设计模式,能够培养我们良好的面向对象编程习惯,同时在实际应用中,可以如鱼得水,享受游刃有余的乐趣。代理模式是比较有用途的一种模式,而且变种较多,应用场合覆盖从小结构到整个系统的大结构,Proxy是代理的意思,我们也许有代理服务器等概念,代理概念可以解释为:在出发点到目的地之间有一道中间层,意为代理。
为什么要使用Proxy?
1.授权机制--不同级别的用户对同一对象拥有不同的访问权利,如Jive论坛系统中,就使用Proxy进行授权机制控制,访问论坛有两种人:注册用户和游客(未注册用户),Jive中就通过类似ForumProxy这样的代理来控制这两种用户对论坛的访问权限。 2.某个客户端不能直接操作到某个对象,但又必须和那个对象有所互动。 举例两个具体情况:
(1)如果那个对象是一个是很大的图片,需要花费很长时间才能显示出来,那么当这个图片包含在文档中时,使用编辑器或浏览器打开这个文档,打开文档必须很迅速,不能等待大图片处理完成,这时需要做个图片Proxy来代替真正的图片。
(2)如果那个对象在Internet的某个远端服务器上,直接操作这个对象因为网络速度原因可能比较慢,那我们可以先用Proxy来代替那个对象。
总之原则是,对于开销很大的对象,只有在使用它时才创建,这个原则可以为我们节省很多宝贵的Java内存。所以,有些人认为Java耗费资源内存,我以为这和程序编制思路也有一定的关系。
如何使用Proxy?
以Jive论坛系统为例,访问论坛系统的用户有多种类型:注册普通用户、论坛管理者、系统管理者、游客,注册普通用户才能发言;论坛管理者可以管理他被授权的论坛;系统管理者可以管理所有事务等,这些权限划分和管理是使用Proxy完成的。
Forum是Jive的核心接口,在Forum中陈列了有关论坛操作的主要行为,如论坛名称、论坛描述的获取和修改,帖子发表删除编辑等。
在ForumPermissions中定义了各种级别权限的用户:
public class ForumPermissions implements Cacheable { /**
* Permission to read object. */
public static final int READ = 0; /**
* Permission to administer the entire sytem. */
public static final int SYSTEM_ADMIN = 1; /**
* Permission to administer a particular forum. */
public static final int FORUM_ADMIN = 2;
15
…… 此处隐藏:1355字,全部文档内容请下载后查看。喜欢就下载吧 ……相关推荐:
- [高等教育]公司协助某村精准扶贫工作总结.doc
- [高等教育]高二生物知识点总结(全)
- [高等教育]苏教版数学三年级下册《解决问题的策略
- [高等教育]仪器分析课程学习心得
- [高等教育]2017年五邑大学数学与计算科学学院333
- [高等教育]人教版七年级下册语文第四单元测试题(
- [高等教育]2018年秋七年级英语上册Unit7Howmuchar
- [高等教育]2017年八年级下数学教学工作小结
- [高等教育]湖南省怀化市2019届高三统一模拟考试(
- [高等教育]四年级下册科学_基础训练及答案教材
- [高等教育]城郊煤矿西风井管路伸缩器更换施工安全
- [高等教育]昆八中20182019学年度上学期期末考试
- [高等教育]项目部各类人员任命书
- [高等教育]上市公司经营水务产业的模式
- [高等教育]人教版高二化学第一学期第三章水溶液中
- [高等教育]【中考物理第一轮复习资料】四.压强与
- [高等教育]金坑水电站报废改建工程机电设备更新改
- [高等教育]高中生物教学工作计划简易版
- [高等教育]2017年西华大学攀枝花学院(联合办学)44
- [高等教育]最新整理超短爆笑英文小笑话大全
- 优秀教师继续教育学习心得体会
- 阳历到阴历的转换
- 留守儿童教育案例分析
- 华师17春秋学期《玩教具制作与环境布置
- 测速传感器新型安装装置的现场应用
- 人教版小学数学三年级下册第四单元
- 创业个人意向书
- 山东省潍坊市2012年高考仿真试题(三)
- [恒心][好卷速递]四川省成都外国语学校
- 多少人错把好转反应当成了病情加重处理
- 中外广播电视史复习资料整理
- 江苏省扬州市江都区宜陵镇中学2014-201
- 工程造价专业毕业实习报告
- 广西师范学院心理与教育统计
- aympkrq基于 - asp的博客网站设计与开
- 建筑业外出经营相关流程操作(营改增后
- 人治 德治 法治
- [精华篇]常识判断专项训练题库
- 中国共产党为什么要实行民主集中
- 小学数学第三册第一单元试卷(A、B、C




