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


    简单工厂模式:简单工模式时类的创建模式,又叫做静态工厂方法(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. }

     

    配置文件:

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

  • 相关阅读:
    【LeetCode】1758. 生成交替二进制字符串的最少操作数
    [架构之路-220]:与机器打交道VS与人打交道,计算机系统VS人体系统,计算机网络VS人类社会:架构、通信、语言、网络、智能、情感、生命
    【OpenSSL】Ubuntu 下编译OpenSSL
    layuiAPI
    UWB定位模块
    [附源码]计算机毕业设计JAVA超市收银系统论文
    【RCNN系列】RCNN论文总结
    【Pytorch】深度学习之损失函数
    java计算机毕业设计网络城市交通应急管理系统MyBatis+系统+LW文档+源码+调试部署
    Android文件格式
  • 原文地址:https://blog.csdn.net/weixin_51485547/article/details/127905970