版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、a,1,“设计模式”学习报告,移动互联子公司 胡 凯 2003-08-07,a,2,概要:,模式概论 简单工厂模式 工厂模式 设计模式的实际应用 总结 相关资源,a,3,模式概论,什么是模式 为什么要用模式 设计模式的分类,a,4,什么是模式 ?,模式,其实就是解决某一类问题的方法论。把解决某类问题的方法总结归纳到理论高度,那就是模式。 Alexander给出的经典定义是:每个模式都描述了一个在我们的环境中不断出现的问题,然后描述了该问题的解决方案的核心。通过这种方式,你可以无数次地使用那些已有的解决方案,无需在重复相同的工作。 模式有不同的领域,建筑领域有建筑模式,软件设计领域也有设计模式。
2、,a,5,因为每一个模式描述了一个在我们周围不断重复发生的问题,以及问题的解决方案的核心,它是一种指导,在一个良好的指导下,有助于你完成任务,有助于你作出一个优良的设计方案,达到事半功倍的效果。而且会得到解决问题的最佳办法。,为什么要用模式?,a,6,设计模式的分类,GOF的一书中提出了23种模式,而这23种模式又可划分为创建型模式,结构型模式,行为型模式.工厂模式则属于创建型模式. 工厂模式专门负责讲大量有共同接口的类实例化,工厂模式可以动态决定将哪一个类实例化,不必事先知道每次要实例化哪一个类.工厂模式有以下几种形态: 简单工厂(Simple Factory)模式 工厂方法(Factory
3、 Method)模式 抽象工厂(Abstract Factory)模式,以下就这几个模式的结构和实例与大家分享一下(其他的我还不太懂._).相信当中有不正确地方,还望大家提出,指正.,a,7,简单工厂 (Simple Factory)模式,简单工厂模式的引进 简单工厂模式的结构 简单工厂模式的实现 简单工厂模式的优缺点,a,8,简单工厂模式的引论,简单工厂模式,又称静态工厂方法模式(Static Factory Method Pattern).我们可以先来看一个实际生活中的例子:一个农场公司要向市场销售各类水果,有以下几类水果:葡萄Grape,草莓Strawberry,苹果Apple.考虑到它
4、们的共性,我们一般是定义一个接口为水果(Fruit),a,9,public class Apple implements Fruit public void grow() System.out.println(Apple is growing.); public void harvest() System.out.println(Apple has been harvested.); public void plant() System.out.println(Apple has been planted.); ,public interface Fruit void grow(); void
5、 harvest(); void plant();,Class Apple:,类的实现,a,10,public class Grape implements Fruit public void grow() System.out.println(“Grape is growing.); public void harvest() System.out.println(“Grape has been harvested.); public void plant() System.out.println(“Grape has been planted.); ,public interface Fr
6、uit void grow(); void harvest(); void plant();,Class Grape:,a,11,public class Strawberry implements Fruit public void grow() System.out.println( Strawberry is growing.); public void harvest() System.out.println( Strawberry has been harvested.); public void plant() System.out.println( Strawberry has
7、been planted.); ,public interface Fruit void grow(); void harvest(); void plant();,Class Strawberry:,a,12,public class FruitGardener public static Fruit factory(String which) throws BadFruitException if (which.equalsIgnoreCase(apple) return new Apple(); else if (which.equalsIgnoreCase(strawberry) re
8、turn new Strawberry(); else if (which.equalsIgnoreCase(grape) return new Grape(); else throw new BadFruitException(Bad fruit request); ,Class FruitGardener:,a,13,简单工厂模式的结构,Fruit Gardener factory(String which),工厂类(Creator)角色:担任这个角色的是工厂方法模式的核心,含有与应用紧密相关的商业逻辑.具体由一个JAVA类实现. 抽象产品(Product)角色:一般是所有公共产品的公共拥
9、有的接口.可以是接口也可以是抽象类. 具体产品(Concrete Product)角色:工厂模式所创建的任何对象都是这个角色.具体由一个JAVA类实现.,Applet等,fruit,a,14,简单工厂模式的实现,多层次的产品结构 使用JAVA接口或JAVA抽象类 多个工厂方法(可以有多个工厂方法) 抽象产品角色的省略 工厂角色与抽象产品角色合并 三个角色的合并,a,15,简单工厂模式的优点和缺点,优点: 客户端可以免除直接创建产品对象的责任,而仅仅负责“消费”产品,实现了对责任的分割.,缺点: 这个工厂类里集中了所有的产品创建逻辑,当要增加产品时都需更改工厂类 静态方法无法由子类继承,工厂角色
10、无法形成等级结构,a,16,一个简单工厂模式的实例,a,17,工厂方法 (Factory Method)模式,工厂方法模式的引进 工厂方法模式的结构和角色 工厂方法模式的实现 简单模式和工厂方法模式,a,18,工厂方法模式的引进,回顾前面讨论的简单工厂模式的缺点:当有新的产品加入到系统中之后,就需要更改工厂类,将必要的逻辑加入到工厂类中,而这就有背与“开闭的原则.,扩展工厂类等级结构,简单工厂模式,工厂方法模式,“开闭”原则要求一个系统在无需修改的情况下扩展其功能,a,19,工厂方法模式的结构和角色,抽象工厂(Creator)角色 具体工厂(Concrete Creator)角色 抽象产品(P
11、roduct)角色 具体产品(Concrete Product)角色,public class Client private static Creator creator1, creator2; private static Product prod1, prod2; public static void main(String args) creator1 = new ConcreteCreator1(); prod1 = creator1.factory(); creator2 = new ConcreteCreator2(); prod2 = creator2.factory(); ,a
12、,20,public interface Creator public Product factory(); ,public class ConcreteCreator1 implements Creator public Product factory() return new ConcreteProduct1(); ,public class ConcreteCreator2 implements Creator public Product factory() return new ConcreteProduct2(); ,工厂类,public interface Product ,pu
13、blic class ConcreteProduct1 implements Product public ConcreteProduct1() System.out.println(CocnreteProduct1 is being created.); ,public class ConcreteProduct2 implements Product public ConcreteProduct2() System.out.println(CocnreteProduct2 is being created.); ,产品类,public class Client private static
14、 Creator creator1, creator2; private static Product prod1, prod2; public static void main(String args) creator1 = new ConcreteCreator1(); prod1 = creator1.factory(); creator2 = new ConcreteCreator2(); prod2 = creator2.factory(); ,a,21,活动序列图,客户端创建一个ConcreteCreator1对象,然后调用ConcreteProduct1的构造函数创建出产品对象.
15、,creator1 = new ConcreteCreator1(); prod1 = creator1.factory();,a,22,简单工厂模式和工厂方法模式,不同之处:工厂模式的核心是一个抽象工厂类,而简单工厂模式把核心放在一个具体类上,表现在当要加入一个新的产品的时候,并不需要更改工厂类,而只需要扩展抽象工厂类.实现了工厂等级结构,符合“开闭” 原则的要求. 相同之处:Factory()方法返回的数据类型是一个抽象类型,而不是一种具体产品类型,而客户端也不必知道所得到的真实类型,a,23,设计模式的实际应用,ConnectionFactory (abstract),MEIPDataS
16、ourceConnection(class),MEIPDriverConnection(class),static newInstance(),所在包: com.creawor.meip.db,public interface Creator public abstract Connection getConnection(); ConnectionFactory static newInstance() ,单实例模式 singleton,抽象工厂和抽象产品和为一个抽象类,继承getConnection()方法得到具体类型的Connection,具体产品,a,24,FormatFactory(abstract),ExcelFormat(class),ContentFormat(class),static newInstance(),所在包: com.creawor.meip. format,public inte
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年大学第四学年(机械制造技术)机械技能专项试题及答案
- 四川省射洪县2025-2026学年初三下学期开学质检物理试题含解析
- 浙江省嘉兴市秀洲区实验中学2026届初三下学期4月调研语文试题含解析
- 长郡教育集团2026届初三下学期第六次质量调研考试英语试题含解析
- 云南省临沧市2025-2026学年初三第一次模拟考试(英语试题)试卷含解析
- 2025 高中文学类阅读理解之职场励志故事课件
- 2026年过程控制系统中的数据采集与处理
- 2026年面对挑战机械设计中的创新策略
- 康复医学科脑卒中患者护理要点
- 创业者特质与企业家精神
- 2025年爆破公司自查自纠报告及整改措施范文
- 试验样机管理办法
- 安徽省合肥市四十五中学2026届中考二模英语试题含答案
- 珍惜时间200字11篇
- 幼儿园谷雨课件
- 量子计算入门:通过线性代数学习量子计算 课件 第11章 量子傅里叶变换
- 行政处罚法专题培训课件
- 统计知识党校培训课件
- 2025年四川省泸州市中考道德与法治真题(附答案解析)
- 传统曲艺进高校活动方案
- 心电图基础知识与识图理论考核试题题库及答案
评论
0/150
提交评论