设计模式5.ppt_第1页
设计模式5.ppt_第2页
设计模式5.ppt_第3页
设计模式5.ppt_第4页
设计模式5.ppt_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论