工厂方法(FactoryMethod)

概述:

定义一个用于创建对象的接口,让子类决定实例化哪一个类(使一个类的实例化延迟到其子类)

适用性:

  1. 当一个类不知道它必须创建的对象的类的时候
  2. 当一个类希望由它的子类来指定它所创建的对象的时候
  3. 当类将创建对象的职责委托给多个帮助子类中的某一个,并且你希望将“哪一个帮助子类是代理者”这一信息局部化的时候

举例:

  1. public class TestFactoryMethod {
  2. public static void main(String[] args) {
  3. IWorkFactory s = new StudentWorkFactory();
  4. s.getWork().doWork();
  5. IWorkFactory t = new TeacherWorkFactory();
  6. t.getWork().doWork();
  7. }
  8. }
  9. interface IWorkFactory {
  10. Work getWork();
  11. }
  12. class StudentWorkFactory implements IWorkFactory{
  13. @Override
  14. public Work getWork() {
  15. return new StudentWork();
  16. }
  17. }
  18. class TeacherWorkFactory implements IWorkFactory{
  19. @Override
  20. public Work getWork() {
  21. return new TeacherWork();
  22. }
  23. }
  24. interface Work {
  25. void doWork();
  26. }
  27. class StudentWork implements Work {
  28. @Override
  29. public void doWork() {
  30. System.out.println("学生写作业");
  31. }
  32. }
  33. class TeacherWork implements Work {
  34. @Override
  35. public void doWork() {
  36. System.out.println("老师改作业");
  37. }
  38. }

以上是标准的工厂设计模式,我的理解:

  • Work 接口:定义了一类产品(比如蜂蜜柚子茶),这些产品都可以干一种事(doWork():被饮用)。
  • Work 实现类:干这种事的结果各有不同(厂家不同,口味不一),后期可以添加具有这种特点的产品(其他厂家)。
  • IWorkFactory 接口:定义了一类工厂,这些工厂都可以干一种事(getWork():生产饮料)。
  • IWorkFactory 实现类:不同厂家的工厂不一样,后期可以在又有厂家开始做蜂蜜柚子茶了之后,添加这些新厂家的工厂。

这样做的目的和好处(也是多态性的好处):在需要进行产品更新时,主代码 main 中不需要进行过多的修改,只需要添加或修改产品子类、工厂子类,然后在主代码中进行相应子类对象的实例化代码的添加和修改,后面实现的功能以及跟其他部分的关联都不用做大的更新。

时间: 2024-10-07 03:40:41

工厂方法(FactoryMethod)的相关文章

浅谈JAVA设计模式之——工厂方法(FactoryMethod)

转载请注明出处:http://blog.csdn.net/l1028386804/article/details/45440937 一.概述 定义一个用于创建对象的接口,让子类决定实例化哪一个类.FactoryMethod使一个类的实例化延迟到其子类. 二.适用性 当一个类不知道它所必须创建的对象的类的时候. 当一个类希望由它的子类来指定它所创建的对象的时候. 当类将创建对象的职责委托给多个帮助子类中的某一个,并且你希望将哪一个帮助子类是代理者这一信息局部化的时候. 三.参与者 1.Produc

factory工厂模式之工厂方法FactoryMethod

工厂方法(Factory Method) * 工厂方法把不同的产品放在实现了工厂接口的不同工厂类(FactoryAImpl,FactoryBImpl...)里面, * 这样就算其中一个工厂类出了问题,其他工厂类也能正常工作,互相不受影响, * 以后增加新产品,也只需要新增一个实现工厂接口工厂类,就能达到,不用修改已有的代码 代码解释: 1.创建产品接口Product,并创建2个产品子类android手机.Apple手机,都实现Product接口 public interface Product

【设计模式】——工厂方法FactoryMethod

工厂方法模式应用场景: 1.当有一组类型的对象需要创建 2.编码时,不能预见需创建哪种类型的实例 3.考虑程序的可扩展性 代码结构: 例如:画一个人的头像,头像分为左偏分发型.右偏分发型.以及中分等. 1).创建一个接口,里面有一个函数draw() public interface HairInterface { public void draw(); } 2).实现类 左偏分: public class LeftHair implements HairInterface { public vo

设计模式(二)工厂方法模式(FactoryMethod)-创建型

在简单工厂模式中,通过一个工厂类来判断需要调用的具体的实现类,隔离了客户端和具体的实现类之间的关系,从而降低了系统间的耦合性,但是也带来了一个问题,就是如果要创建的对象很多,这个工厂类会非常庞大,仍然不利于后期的代码维护. 工厂方法模式: 一个抽象产品类,可以派生出多个具体产品类. 一个抽象工厂类,可以派生出多个具体工厂类. 每个具体工厂类只能创建一个具体产品类的实例. 工厂方法模式的示意图 实现: Translate.java package com.devin.simplefactory;

FactoryMethodPattern(工厂方法模式)-----Java/.Net

也就是工厂方法(FactoryMethod)模式允许将产品类的实例化推迟到具体的创建者子类,由创建者子类决定实例化哪一个产品类.我们同样以汽车的生产作为讲解该模式的例子,因为汽车生产从宏观上来说也是特别符合这个模式的.我要一辆汽车,什么品牌的我没有要求,符合是汽车这个标准就行了.那么世面上不同的汽车生产商就会用自己的生产流程生产出符合汽车这个标准的不同品牌汽车.同样,我们也撸起袖子码一码!因为该模式没有强调待生产的产品类是复杂的,同样也为了减少大家的代码阅读,这次我们把汽车相关类定义的更简单一点

Python设计模式——工厂方法模式(FactoryMethod)

需求:有一个学雷锋活动,有买米和扫地两个内容,参与的人有大学生和社区志愿者,他们各自的方法不一样. 如果用简单工厂模式实现: #encoding=utf-8 __author__ = '[email protected]' class LeiFeng(): def buy_rice(self): pass def sweep(self): pass class Student(LeiFeng): def buy_rice(self): print '大学生帮你买米' def sweep(self

Design Patterns 3 不再犹豫---工厂方法模式FactoryMethod

工厂方法模式FactoryMethod 工厂方法模式的实现把具体产品的创建推迟到子类中,从而解决了简单工厂模式难以扩展的问题. 把简单工厂类分解为抽象基类和若干个具体类如下代码: //抽象的工厂方法“总部”类FactoryMethod public abstract class FactoryMethod { //返回目标Food对象的抽象的工厂方法Creator public abstract Food Creator(); } //“总部”的具体子类PotatoesFactory publi

设计者模式 -- 工厂方法(FactoryMethod)

在了解工厂方法之前,先了解一下面向对象设计中的开闭原则(OCP) 开闭原则是面向对象设计中“可复用设计的基石”,是面向对象设计中最重要的原则之一,其他的很对设计原则都是实现开闭原则的一种手段. 开闭原则中的“开”是指对于组件功能中的扩展是开放的,是允许对其进行功能扩展的:开闭原则中的“闭”是指对于原有代码的修改是封闭的,即不应该修改原有的代码.就是对扩展开放,对修改关闭.当对某一软件进行扩展是,精良不要修改原有的软件实体,也就是再不修改原有软件实体的情况下对其进行扩展.这种设计方式是一种目标,考

Java 设计模式(四)-工厂方法模式 (FactoryMethod Pattern)

1     概念定义 1.1   定义 定义一个用于创建对象的接口,让子类决定实例化哪一个类.工厂方法使一个类的实例化延迟到其子类. 1.2   类型 创建类模式 2     原理特征 2.1   类图 2.2   优点 1)封装性良好,代码结构清晰 2)可拓展性高,只需修改一下工厂方法或拓展一个工厂类 3)屏蔽产品类,调用者不需要关心产品类的变化 4)高度解耦,高层模块只需知道产品抽象类,无需关注实现 2.3   缺点 代码复杂度增加 3     .应用拓展 3.1   应用场景 1)    

4.工厂方法模式-factoryMethod

初识工厂方法模式 定义 定义一个用于创建对象的接口,让子类决定实例化哪一个类,Factory Method使一个类的实例化延迟到其子类. 结构和说明 Product:定义工厂方法所创建的对象的接口,也就是实际需要使用的对象的接口 ConcreteProduct:具体的Product接口的实现对象. Creator:创建器,声明工厂方法 ConcreteCreator:具体的创建器对象,覆盖实现Creator定义的工厂方法,返回具体的Product实例 体会工厂方法模式 导出数据的应用框架 ? 考