简单工厂模式:简单工模式时类的创建模式,又叫做静态工厂方法(static Factory Method)。简单工厂模式是一个工厂对象决定创建出哪一种产品类的实例。它存在的目的很简单:定义一个创建对象的接口。简单工厂模式的最大优点在于工厂类中包含了必要的逻辑判断,根据客户端的选择条件动态实例化相关的类,对于客户端来说,去除了与具体产品的依赖。

工厂方法模式(Factory Method),定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。

抽象工厂模式(Abstract Factory),提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。

加反射和配置文件可以解决不符合开闭原则问题。

单产品:
不反射:简单工厂 好于 工厂方法
反射:简单工厂 好于 工厂方法
多产品:
不反射:抽象工厂(改) 好于 抽象工厂
反射:抽象工厂 好于 抽象工厂(改)

抽象工厂(改进)+反射+配置文件 实现制造汽车

abstract class Benz {abstract void createCar();
}
public class GasBenz extends Benz{@Overridevoid createCar() {System.out.println("生产燃油的Benz");}
}
public class ElectricBenz extends Benz{@Overridevoid createCar() {System.out.println("生产电力的Benz");}
}abstract class BYD {abstract void createCar();
}
public class GasBYD extends BYD {@Overridevoid createCar() {System.out.println("生产燃油的BYD");}
}
public class ElectricBYD extends BYD{@Overridevoid createCar() {System.out.println("生产电力的BYD");}
}
public class Car_making {public static Benz createBenz() throws ClassNotFoundException, InstantiationException, IllegalAccessException, IOException {InputStream is = Car_making.class.getClassLoader().getResourceAsStream("Brands.properties");Properties proper = new Properties();proper.load(is);String type = proper.getProperty("type");String className = "abstractFactory" + "." + type + "Benz";return (Benz) Class.forName(className).newInstance();}public static BYD createBYD() throws ClassNotFoundException, InstantiationException, IllegalAccessException, IOException {InputStream is = Car_making.class.getClassLoader().getResourceAsStream("Brands.properties");Properties proper = new Properties();proper.load(is);String type = proper.getProperty("type");String className = "abstractFactory" + "." + type + "BYD";return (BYD) Class.forName(className).newInstance();}
}
//测试类public class Test {public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException, IOException {Benz benz = Car_making.createBenz();benz.createCar();System.out.println("------------------");BYD byd = Car_making.createBYD();byd.createCar();}
}

配置文件:

简单工厂与其他设计模式的联系

简单工厂、工厂方法、抽象工厂、抽象工厂加简单工厂相关推荐

  1. 设计模式之工厂类模式总结对比、简单工厂模式、工厂方法模式、抽象工厂模式、带反射的工厂模式、例子代码分析、最详细

    1. 题目 假设某公司同时用SqlServer.MySql数据库,即会切换两数据库(不同数据库的sql语句有些许差异),同时,两数据库里均有对Users.Departments表的操作(sql代码不一 ...

  2. 『创建型』简单工厂SimpleFactory、工厂方法FactoryMethod、抽象工厂AbstractFactory

    为什么80%的码农都做不了架构师?>>>    几点说明 永远不要纠结于在什么时候使用什么模式 永远不要纠结于什么模式适用于什么情景 永远不要去死记任何的模式 并不是说,23种设计模 ...

  3. 简单工厂模式、工厂方法模式、抽象工厂模式 之间的对比

    先看各自的结构: 简单工厂模式(SimpleFactory Mode): 简单工厂模式的思路是,首先我们把一些共性的东西(算法)拿出来,进行抽象,比如加减乘除.然后我们在定义一个类作为工厂类,工厂类的 ...

  4. [设计模式] ------ 对比总结:简单工厂模式、工厂方法模式、抽象工厂模式

    三个概念: 简单工厂模式:就是一个简单的工厂类,根据不同的入参类型,返回不同的父类引用的子类对象. 工厂方法模式:就是将生成哪个子类对象的过程,延迟到工厂子类实现,工厂父类只定义接口. 抽象工厂模式: ...

  5. getresourceasstream方法_【设计模式】第三篇:一篇搞定工厂模式【简单工厂、工厂方法模式、抽象工厂模式】...

    文章系列目录(持续更新中): [设计模式]第一篇:概述.耦合.UML.七大原则,详细分析总结(基于Java) [设计模式]第二篇:单例模式的几种实现And反射对其的破坏 一 为什么要用工厂模式 之前讲 ...

  6. 简单工厂模式、工厂方法模式与抽象工厂模式的区别(转)

    虽然看完了<大话设计模式>,但是工厂模式的三种类型之间的差异,理解还不是非常透彻,那么本文就围绕三者间的差异性来阐述各自的优缺点. 简单工厂模式 (Simple Factory) 首先定义 ...

  7. 23种设计模式之简单工厂模式,工厂方法模式,抽象工厂模式详解

    工厂模式详解 1. 简单工厂模式 1.1 需求分析 1.2 使用传统方式实现 1.2.1 类图 1.2.2 代码实现 1.2.2.1 新建pizza抽象类 1.2.2.2 希腊披萨实现类 1.2.2. ...

  8. 工厂模式——三个工厂模式(简单工厂模式,工厂方法模式,抽象工厂模式)...

    工厂模式在<Java与模式>中分为三类: 1)简单工厂模式(Simple Factory):不利于产生系列产品: 2)工厂方法模式(Factory Method):又称为多形性工厂: 3) ...

  9. 设计模式系列——三个工厂模式(简单工厂模式,工厂方法模式,抽象工厂模式)...

    转自:http://www.cnblogs.com/stonehat/archive/2012/04/16/2451891.html 设计模式系列--三个工厂模式(简单工厂模式,工厂方法模式,抽象工厂 ...

  10. JavaScript 前端简单工厂模式、工厂方法模式、抽象工厂模式优缺点及详解 — 设计模式《二》

    工厂模式 前言:就前端 JavaScript 语言来说,可以把简单工厂模式.工厂方法模式.抽象工厂模式归纳为一种即工厂模式: 一. 简单工厂模式 介绍/概述: 简单工厂模式的工厂类一般是使用静态方法, ...

最新文章

  1. python在中小学教学中的应用-在python程序中的进程操作
  2. Android适配华为手机,华为Mate 10将适配Android P 更流畅体验
  3. redisTemplate设置key零点过期,生成自增的单号
  4. pg高性能服务器,Pgpool-II 负载均衡对PG的性能影响
  5. 包管理器_包管理器的演变
  6. SOLID,GRASP和面向对象设计的其他基本原理
  7. 【报告分享】2020年中国人工智能商业落地研究报告.pdf(附下载链接)
  8. Codeforces 455B A Lot of Games 字典树上博弈
  9. libiconv的介绍
  10. python的pyaudio教程入门_Python音频操作工具PyAudio上手教程详解
  11. 广东再增一项重大跨海工程 黄茅海跨海通道将开建
  12. 深入理解Attention及变种(二)
  13. 游戏命中判定:圆桌算法和程序实现
  14. 芒果改进YOLOv7系列:首发改进特征融合网络BiFPN结构,融合更多有效特征
  15. P0.9COB小间距LED显示技术的优势。
  16. 瞧,他的代码,他的内裤
  17. HOOK 几种实现方式区别
  18. html select不允许选择,设置select下拉框不能选择
  19. MSSQL 如何删除字段的所有约束和索引
  20. private、public、protected

热门文章

  1. VisualSvn破解(VS2019)
  2. opencv 去除背景
  3. 为了监控老板,我用Python做了个摸鱼神器
  4. Eclipse安装与使用教程
  5. C语言顺序表:1、顺序表的存储、2、顺序表的实现.
  6. 大数据工程师(开发)面试系列(7)
  7. 远程主机强迫关闭了一个现有的连接。请高手解答?
  8. 貝塞爾 Layer 入門指南
  9. 存储过程中 IN,OUT,INOUT类型参数的区别
  10. 快速了解 Git 仓库