版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、Java 设计模式之工厂系列,什么是设计模式? 它有什么用途?,对于工程设计来说,经验是至关重要的。然而,从知识层面上来讲,经验只是作为一种工作的积累而存在于个人的大脑中,很难传授或者记录。为了解决这样的问题,人们提出了模式的概念。 所谓模式,是指在一个特定背景下,反复出现的问题解决方案。通常在提到软件设计模式的时候,一般指的是在GOF的经典图书Design PattenElements of Reusable Object-Oriented Software中出现的23个模式,它们是软件设计过程中反复出现的一些问题的解决方案。 Java发展之时,正是模式兴盛之际,因此java在其API中就大
2、量地使用了设计模式,从而使得任何学习Java的人不在一定程度上了解模式,就不会真正的理解和掌握Java API,也就谈不到用这些API来编写程序了。从这个角度来说,学习模式是学习Java和学习面向对象编程(不仅局限于Java)的必经之路。,设计模式的分类,创建型 创建型模式是用来创建对象的模式,抽象了实例化的过程,帮助一个 系统独立于其关联对象的创建组合和表示方式。 结构型 结构型模式讨论的是类和对象的结构,它采用继承机制来组合接口或实现,或者通过组合一些对象实现新的功能。 行为型 行为型设计模式关注的是对象的行为,用来解决对象之间的联系问题。,工厂方法模式,定义 定义一个用于创建对象的接口,
3、让子类决定实例化哪一个类。FactoryMethod使一个类的实例化延迟到其子类。 适用性 1.当一个类不知道它所必须创建的对象的类的时候。 2.当一个类希望由它的子类来指定它所创建的对象的时候。 3.当类将创建对象的职责委托给多个帮助子类中的某一个,并且你希望 将哪一个帮助子类是代理者这一信息局部化的时候。,参与者,1.Product 定义工厂方法所创建的对象的接口 2. ConcreteProduct 实现Product接口。 3. Creator 声明工厂方法,该方法返回一个Product类型的 对象。 Creator也可以 定义一个工厂方法的缺省实现,它返回一个缺省的ConcreteP
4、roduct对 象。 可以调用工厂方法以创建一个Product对象。 4.ConcreteCreator 重定义工厂方法以返回一个ConcreteProduct实例。,类图,例子,Product public interface Work void doWork(); ConcreteProduct public class StudentWork implements Work public void doWork() System.out.println(学生做作业!); public class TeacherWork implements Work public void doWork
5、() System.out.println(老师审批作业!); ,例子,Creator public interface IWorkFactory WorkgetWork(); ConcreteCreator public class StudentWorkFactory implements IWorkFactory public Work getWork() return new StudentWork(); public class TeacherWorkFactory implements IWorkFactory public Work getWork() return new Te
6、acherWork(); ,例子,Test public class Test public static void main(String args) IWorkFactory studentWorkFactory = new StudentWorkFactory(); studentWorkFactory.getWork().doWork(); IWorkFactory teacherWorkFactory = new TeacherWorkFactory(); teacherWorkFactory.getWork().doWork(); result 学生做作业! 老师审批作业!,抽象工
7、厂模式,定义 提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。 适用性 1.一个系统要独立于它的产品的创建、组合和表示时。 2.一个系统要由多个产品系列中的一个来配置时。 3.当你要强调一系列相关的产品对象的设计以便进行联合使用时。 4.当你提供一个产品类库,而只想显示它们的接口而不是实现时。,参与者,1.AbstractFactory 声明一个创建抽象产品对象的操作接口。 2.ConcreteFactory 实现创建具体产品对象的操作。 3.AbstractProduct 为一类产品对象声明一个接口。 4.ConcreteProduct 定义一个将被相应的具体工厂创建的产
8、品对象。 实现AbstractProduct接口。 5.Client 仅使用由AbstractFactory和AbstractProduct类声明的接口,类图,例子,AbstractFactory public interface IAnimalFactory ICat createCat(); IDog createDog(); ConcreteFactory public class BlackAnimalFactory implements IAnimalFactory public ICat createCat() return new BlackCat(); public IDog
9、createDog() return new BlackDog(); ,例子,public class WhiteAnimalFactory implements IAnimalFactory public ICat createCat() return new WhiteCat(); public IDog createDog() return new WhiteDog(); AbstractProduct public interface ICat void eat(); public interface IDog void eat(); ,例子,ConcreteProduct publi
10、c class BlackCat implements ICat public void eat() System.out.println(The black cat is eating!); public class WhiteCat implements ICat public void eat() System.out.println(The white cat is eating!); public class BlackDog implements IDog public void eat() System.out.println(The black dog is eating);
11、public class WhiteDog implements IDog public void eat() System.out.println(The white dog is eating!); ,例子,Client public static void main(String args) IAnimalFactory blackAnimalFactory = newBlackAnimalFactory(); ICat blackCat = blackAnimalFactory.createCat(); blackCat.eat(); IDog blackDog = blackAnimalFactory.createDog(); blackDog.eat(); IAnimalFactory whiteAnimalFactory = new WhiteAnimalFactory(); ICat whiteCat = whiteAnimalFactory.createCat(); whiteCat.
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 医院内感染预防的感染控制创新
- 2026中医护理实践报告撰写课件
- 江西省宜春市宜丰县宜丰中学2023-2024学年高三上学期开学地理试题(解析版)
- 内科护理学评估与干预(副高)
- 压疮护理与职业健康安全管理
- 新疆乌鲁木齐仟叶学校2025-2026学年八校联考中考数学试题模拟试卷含解析
- 浙江省台州椒江区2025-2026学年第二学期9月月度调研测试初三英语试题含解析
- 江苏省盐城市解放路实验校2025-2026学年初三英语试题期末练习试卷含解析
- 介入护理操作规范与流程
- 福建省宁德2026届初三中考线上模拟测试语文试题含解析
- 2026春招:农业银行题库及答案
- 2026广州环投集团校招面笔试题及答案
- 供电公司安全生产培训会课件
- 中班多肉种植方案
- 颜氏家训教学课件
- 中电建商业保理有限公司校园招聘考试题库附答案
- 执法用语课件
- 2026年湖州职业技术学院单招职业适应性测试题库及完整答案详解1套
- 2026年浙江纺织服装职业技术学院单招综合素质考试模拟测试卷附答案
- 商务英语面试技巧如何在英语面试中脱颖而出
- 小学奥数之圆与扇形求解【含答案】
评论
0/150
提交评论