• 简单工厂、工厂方法、抽象工厂、抽象工厂加简单工厂


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

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

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

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

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

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

    1. abstract class Benz {
    2. abstract void createCar();
    3. }
    4. public class GasBenz extends Benz{
    5. @Override
    6. void createCar() {
    7. System.out.println("生产燃油的Benz");
    8. }
    9. }
    10. public class ElectricBenz extends Benz{
    11. @Override
    12. void createCar() {
    13. System.out.println("生产电力的Benz");
    14. }
    15. }
    16. abstract class BYD {
    17. abstract void createCar();
    18. }
    19. public class GasBYD extends BYD {
    20. @Override
    21. void createCar() {
    22. System.out.println("生产燃油的BYD");
    23. }
    24. }
    25. public class ElectricBYD extends BYD{
    26. @Override
    27. void createCar() {
    28. System.out.println("生产电力的BYD");
    29. }
    30. }
    31. public class Car_making {
    32. public static Benz createBenz() throws ClassNotFoundException, InstantiationException, IllegalAccessException, IOException {
    33. InputStream is = Car_making.class.getClassLoader().getResourceAsStream("Brands.properties");
    34. Properties proper = new Properties();
    35. proper.load(is);
    36. String type = proper.getProperty("type");
    37. String className = "abstractFactory" + "." + type + "Benz";
    38. return (Benz) Class.forName(className).newInstance();
    39. }
    40. public static BYD createBYD() throws ClassNotFoundException, InstantiationException, IllegalAccessException, IOException {
    41. InputStream is = Car_making.class.getClassLoader().getResourceAsStream("Brands.properties");
    42. Properties proper = new Properties();
    43. proper.load(is);
    44. String type = proper.getProperty("type");
    45. String className = "abstractFactory" + "." + type + "BYD";
    46. return (BYD) Class.forName(className).newInstance();
    47. }
    48. }
    49. //测试类
    50. public class Test {
    51. public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException, IOException {
    52. Benz benz = Car_making.createBenz();
    53. benz.createCar();
    54. System.out.println("------------------");
    55. BYD byd = Car_making.createBYD();
    56. byd.createCar();
    57. }
    58. }

     

    配置文件:

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

  • 相关阅读:
    Java通过反射模拟冰蝎免杀功能
    【内网穿透】搭建我的世界Java版服务器,公网远程联机
    iOS17正式版9月18日正式发布!怎么更新即将发布的iOS17正式版?
    $GNGGA,传感器传输的数据解析
    网站小程序开发有哪些步骤?
    小白学爬虫:通过商品ID或商品链接封装接口获取淘宝商品销量数据接口|淘宝商品销量接口|淘宝月销量接口|淘宝总销量接口
    [附源码]Python计算机毕业设计Django疫情管理系统
    openGauss学习笔记-82 openGauss 数据库管理-内存优化表MOT管理-内存表特性-MOT使用准备前提条件
    JAVA经典百题之求100之内的素数
    数学建模【遗传算法】
  • 原文地址:https://blog.csdn.net/weixin_51485547/article/details/127905970