工厂方法模式

1.工厂方法模式的概述
1.1工厂模式是简单工厂模式的延伸,符合开闭原则的基础上,还可以在增加新的具体产品对象时不需要对已有系统做任何修改。

1.2工厂方法模式:定义一个用于创建对象的接口,但是让子类决定将哪个类实例化,工厂方法模式让一个类的实例化延伸到其子类。(也就是说在工厂方法模式中,不再提供一个统一的工厂类来创建所有的产品对象,而是对于不同的产品提供不同的工厂。例如:宝马工厂生产宝马汽车,奔驰工厂生产奔驰汽车。。。。。)

2.工厂方法模式的结构
2.1模式结构:

 (1):Product(抽象产品):定义产品的接口,是工厂方法模式所创建对象的超类型,产品对象的公共父类。
(2)具体产品:它实现了抽象产品接口,某种类型的具体产品由专门的具体工厂创建,具体工厂和具体产品一一对应。
(3)Factory(抽象工厂):在抽象工厂类中声明了工厂方法,用于返回同一个产品。
(4)具体工厂:抽象工厂的子类,实现了在抽象工厂中声明的工厂方法,并可由客户端调用,返回一个具体产品类的实例。。。

例题:宝马(BMW)工厂制造宝马汽车,奔驰汽车(Benz)工厂制造奔驰汽车。使用工厂方法模式模拟该场景,要求绘制出相应的类图并用Java语言模拟实现。

(1)Car:充当抽象产品角色

public abstract class Car {public abstract void run();//抽象产品方法
}

(2)BMW :充当具体的产品角色

public class BMW extends Car {@Overridepublic void run() {System.out.println("宝马车跑的快...");}
}

(3)Benz:充当具体的产品角色

public class Benz extends Car{@Overridepublic void run() {System.out.println("奔驰车跑的块...");}
}

(4)CarFactory:充当抽象工厂角色

public abstract class CarFactory {public void run(){Car car = this.produceCar();//在工厂类中直接调用汽车工厂类得业务方法run()car.run();}public abstract Car produceCar();//抽象工厂方法.
}

(5)BenzFactory:充当具体工厂角色

public class BenzFactory extends CarFactory{@Overridepublic Car produceCar() {Car car = new Benz();//创建奔驰汽车的对象return car;}
}

(6)BMWFactory:充当具体工厂角色

public class BMWFactory extends CarFactory{@Overridepublic Car produceCar() {Car car = new BMW();//创建宝马汽车的对象return car;}
}

(7)客户端测试类。

public class Client {public static void main(String[] args) {CarFactory factory, factory1;Car car,car1;factory = new BenzFactory();factory1 = new BMWFactory();car = factory.produceCar();car1 = factory1.produceCar();car1.run();car.run();}
}

3.工厂模式的优点:
(1)使用工厂方法来创建用户所需的产品,用户只要关心所需产品对应的工厂,无需关心创建的细节。
(2)所有的具体工厂类都具有同一抽象父类(本例中的CarFactory作为BMWFactory和BenzFactory 的父类)工厂能自行确定创建何种产品对象,而创建的细节完全封装在具体工厂中。
(3)如果新加入产品,就无需修改抽象工厂类和抽象产品类,也无需修改其他具体工厂和产品,而只用添加一个具体工厂和具体产品即可。增加系统的可扩展性,符合开闭原则

4.缺点:
添加新产品会增加具体工厂类和具体产品类,这无疑会增加系统的复杂度,带来更多的开销。。。

总结:当然这题可以使用反射机制并引入配置文件实现。(会更加灵活)具体的实现方式,下次发文详细说明。

最后:希望多多指教,共同进步,与君共勉!!!(争取一周写1-2篇有关Java设计模式的文章,临近期末也当做复习了。。。)

Java设计模式--工厂方法模式相关推荐

  1. JAVA设计模式 - 工厂方法模式

    工厂方法模式(Factory Pattern) 是一种创建型设计模式 , 它是Java中最常用的设计模式之一 . 1 . 工厂方法模式的定义 定义一个创建对象的接口 , 让子类决定实例化哪一个类 . ...

  2. 《转》java设计模式--工厂方法模式(Factory Method)

    本文转自:http://www.cnblogs.com/archimedes/p/java-factory-method-pattern.html 工厂方法模式(别名:虚拟构造) 定义一个用于创建对象 ...

  3. Java设计模式-工厂方法模式和抽象工厂模式

    工厂方法模式定义: 即定义一个创建对象的接口(即抽象工厂类),让其子类(具体工厂类)决定实例化哪一个类(具体产品类)."一对一"的关系 1,一抽象工厂类派生出多个具体工厂类: 2, ...

  4. Java设计模式—工厂方法模式抽象工厂模式

    工厂方法模式与抽象工厂模式都是设计模式中重要而且常见的模式.       工厂方法模式:定义一个用于创建对象的接口,让子类决定实例化哪一个类.工厂方法使一个类的实例化延迟到其子类. 通用类图如下: 在 ...

  5. Java设计模式-工厂方法模式的使用和介绍

    一.工厂方法模式简介 1.定义 工厂方法模式(Factory Method Pattern)又称为工厂模式,也叫虚拟构造器(Virtual Constructor)模式或者多态工厂(Polymorph ...

  6. java设计模式---工厂方法模式

    简单工厂模式的应用就是用来创建一个对象,简单工厂模式是将所有对象的初始化集于一个具体的工厂类来实现,这个工厂类负责所有产品的创建,但是这种创建只能创建单一的产品,如简单工厂模式里的ChickenFac ...

  7. java设计模式——工厂方法模式

    工厂方法模式:为工厂类定义了接口,使用多态来削弱工厂类的职责. * 将简单工厂创建对象的职责分担到子工厂类中,子工厂相互独立,互相不受影响. * 工厂方法模式也有他的局限性,当面对有复杂的树形结构的产 ...

  8. Java——设计模式(工厂方法模式)

    * A:工厂方法模式概述* 工厂方法模式中抽象工厂类负责定义创建对象的接口,具体对象的创建工作由继承抽象工厂的具体类实现.* 简单来说:先定义一个工厂,工厂里面有些方法,这些方法就是用来创建动物的,然 ...

  9. 我的Java设计模式-工厂方法模式

    转载 https://zhuanlan.zhihu.com/p/29549253 转载于:https://www.cnblogs.com/thiaoqueen/p/8298328.html

最新文章

  1. 用微信点单 订餐系统打造属于个人的O2O外卖订餐行业商业平台
  2. python基础代码-python基础知识和练习代码
  3. 张一鸣演讲全文:外部波澜起伏,内心平静如常
  4. Deleting Edges 思维 最短路 删边
  5. python中 普通方法_python中普通方法classmethod和staticmethod的区别与用法
  6. 更好地利用Pmd,Findbugs和CheckStyle的结果。
  7. aspen变压吸附塔_空压机科普:吸附式干燥机的结构和原理
  8. 【JAVA 第五章 】课后习题 奇数排前
  9. 2020年 Google 开发者大会可以预约了
  10. pandas创建与保存(导入与导出)dataframe
  11. 小小数据统计(柱状图、折线图、扇形图)
  12. eight_queens
  13. mysql 独享表空间_Mysql 独享表空间
  14. 关于几种图片格式的压缩
  15. 普中科技51单片机直流电机控制风扇调速
  16. win10上U盘插到电脑上无法显示盘符也打不开怎么办
  17. 《NVMe-over-Fabrics-1_0a-2018.07.23-Ratified》阅读笔记(4)-- Controller Architecture
  18. 【算法】克鲁斯卡尔 (Kruskal) 算法
  19. 谁征服了游戏,谁就征服了智能手机内容
  20. 禹司凤扛鸿蒙炉,琉璃美人煞12人物结局,司凤 璇玑完满,柏麟 副宫主结局大快人心...

热门文章

  1. 卫星星座可视化工具SaVi satellite constellation visualizer安装与使用
  2. picoCTF - la cifra de
  3. Python遥感图像处理应用篇(二十四):Python绘制遥感图像各波段热力图(相关系数矩阵)
  4. 树莓派4B上配置Opencv
  5. javascript中setTimeout
  6. @Component注解的含义
  7. YOLOv5改进——使用深度可分离卷积轻量化C3
  8. 绍兴市人力资源和社会保障局异地数据容灾系统
  9. 图像处理——数字图像处理
  10. java阶乘和的算法_java_4种阶乘算法