网站大量收购闲置独家精品文档,联系QQ:2885784924

第十六章JAVA设计模式.doc

  1. 1、本文档共27页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
PAGE PAGE 1 第十六章 JAVA设计模式 学习目标 理解并掌握Java设计模式的思想。 能够上机对Java设计模式进行运用。 能够在项目中的灵活运用Java设计模式。 课前准备 认识Java设计模式的重要性。 了解Java设计模式的概念和思想。 16.1 本章简介 就Java语言体系来说,设计模式是Java基础知识和J2EE框架知识之间一座隐性的桥。会Java的人越来越多,但是一直徘徊在语言层次的程序员不在少数,真正掌握Java中接口或抽象类的应用不是很多,大家经常以那些技术只适合大型项目为由,避开或忽略它们,实际中,Java的接口或抽象类是真正体现Java思想的核心所在,这些你都将在设计模式里领略到它们变幻无穷的魔力。 设计模式表面上好像也是一种具体的技术,而且新的设计模式不断在出现,设计模式自有其自己的发展轨道,而这些好像和J2EE .Net等技术也无关! 实际上,设计模式并不是一种具体技术,它讲述的是思想,它不仅仅展示了接口或抽象类在实际案例中的灵活应用和智慧,让你能够真正掌握接口或抽象类的应用,从而在原来的Java语言基础上跃进一步,更重要的是,设计模式反复向你强调一个宗旨:要让你的程序尽可能的可重用。 16.2 工厂(Factory)系列 工厂模式定义:提供创建对象的接口。 为何使用? 工厂模式是我们最常用的模式了,工厂模式在Java程序系统可以说是随处可见。 为什么工厂模式是如此常用?因为工厂模式就相当于创建实例对象的new,我们经常要根据类Class生成实例对象,如A a=new A() 。工厂模式也是用来创建实例对象的,所以以后new时就要多个心眼,是否可以考虑实用工厂模式,虽然这样做,可能多做一些工作,但会给你系统带来更大的可扩展性和尽量少的修改量。 工厂模式专门负责将大量有共同接口的类实例化。工厂模式可以动态决定将哪一个类实例化,不必事先知道每次要实例化哪一个类。工厂模式有以下几种形态: (1)简单工厂 (Simple Factory) 模式,又称静态工厂方法模式(Static Factory Method Pattern)。 (2)工厂方法(Factory Method)模式,又称多态性工厂(Polymorphic Factory)模式或虚拟造子(Virtual Constructor)模式。 (3)抽象工厂(Abstract Factory)模式,又称工具箱(Kit 或 Toolkit)模式。 16.2.1 16.2.1.1简单工厂的定义与理解 简单工厂模式,或称静态工厂方法模式,是不同的工厂方法模式的一个特殊实现。 在Java语言中,通常的工厂方法模式不能通过设计功能的退化给出静态工厂方法 模式。因为一个方法是不是静态的,对于Java语言来说是一个很大的区别,必须在一 开始的时候就加以考虑。 简单工厂模式就是由一个工厂类可以根据传入的参数决定创建出哪一种产品类的 实例。它涉及到工厂类角色以及具体产品角色等三个角色: 1、 工厂类角色:担任这个角色的是工厂方法模式的核心,含有与应用密切相关的商业逻辑。工厂类在客户端的直接调用下创建产品对象,它往往由一个具体Java 类实现。 2、 抽象产品角色:担任这个角色的类是工厂方法模式所创建的对象的父类,或它们共同拥有的接口。抽象产品角色可以用一个Java接口或者Java抽象类实现。 3、 具体产品角色:工厂方法模式所创建的任何对象都是这个角色的实例,具体产品角色由一个具体Java类实现。 16.2.1.2 在真实的系统中,产品可以形成复杂的等级结构,这个时候,简单工厂模式采取的 是以不变应万变的策略,一律使用同一个工厂类。这样做的好处是设计简单,产品类的 等级结构不会反映到工厂中来,从而产品类的等级结构的变化也就不会影响到工厂类。 但是这样做的缺点是:增加新的产品必将导致工厂类的修改。 如果模式所产生的具体产品类彼此之间没有共同的商业逻辑,那么抽象产品角色可 以由一个Java接口扮演;相反,如果这些具体产品类彼此之间确有共同的商业逻辑, 那么这些公有的逻辑就应当移到抽象角色里面,这就意味着抽象角色应当由一个抽象类 扮演。在一个类型的等级结构里面,共同的代码应当尽量向上移动,以达到共享的目的, 如下模拟农场公司示例: 代码: /** * 定义水果接口规定出所有的水果必须实现的接口,包括任 * 何水果类必须具备的方法:种植plant(),生长grow() * 以及收获harvest()。 * @author xtgj */ public interface Fruit { //生长 void grow(); // 收获 void harvest(); //种植 void plant(); }

文档评论(0)

yigang0925 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档