设计模式之简单工厂模式(4):创建对象时不会暴露创建逻辑

场景

我们创建商品

内容

1. 不使用工厂模式设计模式

使用传统new方式创建bean。

复制代码
public class NonPattern {
    public static void main(String[] args) {
        //1.我们使用传统方式创建产品
        Produnct produnct = new Produnct("苹果");
        System.out.println(produnct);
    }

    /**
     * 商品类
     */
    public static class Produnct{
        private String name;

        public Produnct(String name){
            this.name = name;
        }
       //setter getter省略
    }
}

2.使用工厂模式设计模式

2.1 逻辑
  1. 工厂模式创建的对象需要创建某一类产品,不是某一个产品,所以创建对象返回的对象是一个拥有共有特诊的接口。
  2. 在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。
  3. 接口是从多个相似类中抽象出来的规范,接口体现了规范(设计)和实现分离的设计哲学,接口本身并不提供任何实现。
2.2 类图
2.3 代码
复制代码
public class FactoryPattern {
    public static void main(String[] args) {
        //1.创建苹果
        Product product1 = AppleProductFactory.create();
        product1.excute(); //产品:苹果

        //2.创建橙子
        Product product2 = OrangeProductFactory.create();
        product2.excute(); //产品:橙子
    }



    public interface Product{
        void excute();
    }

    public static class AppleProduct implements Product{
        private String name = "苹果";
        public void excute() {
            System.out.println("产品:"+this.name);
        }
    }

    public static class OrangeProduct implements Product{
         private String name = "橙子";

         public void excute() {
           System.out.println("产品:"+this.name);
         }
    }

    public static class AppleProductFactory{
      public static Product create(){
          return new AppleProduct();
      };
    }

    public static class OrangeProductFactory{
        public static   Product create(){
            return new OrangeProduct();
        };
    }
}

3.总结

3.1 不使用设计模式对比
  1. 直接面向一个类来编程,new来创建类的实例的话,你就是后面会死的很惨;如果我们修改了产品类属性和构造器,那么通过new创建对象将会改变,如果系统通过new创建的对象很多,那么我们每一处都得改动。
  2. 我们如果对Product,要更换一个类,换一个类的实现;此时就必须在创建这个类实例的地方,都要修改一下这个代码;如果你有1000个地方,都创建了Product这个类的实例;你需要在1000个地方都去修改这个new Product()的这段代码;代码可维护性和可扩展性之差,惨不忍睹,垃圾代码
3.2 不使用设计模式对比
  1. 如果此时有1000个地方都需要获取Product的实例;但是此时Product实现类改了; 我们只要修改一个地方就是ProductFacory中:create()
  2. 但是此时客户端调用一直没变味。面向接口编程。
3.3 工厂模式自己的特点

**优点:**1、一个调用者想创建一个对象,只要知道其名称就可以了。 2、扩展性高,如果想增加一个产品,只要扩展一个工厂类就可以。 3、屏蔽产品的具体实现,调用者只关心产品的接口。

**缺点:**每次增加一个产品时,都需要增加一个具体类和对象实现工厂,使得系统中类的个数成倍增加,在一定程度上增加了系统的复杂度,同时也增加了系统具体类的依赖。这并不是什么好事。

相关推荐
蛋蛋的就会顺顺的8 小时前
hot100 p0——栈,贪心算法,动态规划
java·前端·javascript·算法·leetcode·力扣
需要8268 小时前
Spring Bean 生命周期:从实例化到销毁的完整钩子
java·后端·spring
小 黄 鸡8 小时前
HashMap 面试必会知识点详解(JDK 8)
java·面试·职场和发展
伯恩bourne10 小时前
Spring Boot Bean 注册的两种方式:@Component 家族 vs @Configuration + @Bean
java·spring boot·后端
silvamux_10 小时前
curl 测试 OpenAI 兼容 API 的完整流程
java·人工智能·缓存·ai·oneapi
省钱兄--zs11 小时前
深圳24小时自助健身房软硬件解决方案实战指南与开发流程详解
java·数据仓库·spring boot·小程序·架构
顽疲11 小时前
Java vue 养老系统源码详解:月账单 care_month_bill 与 Quartz 扣费 Job 实践
java·开发语言·vue.js·vue养老·springboot养老·java养老
Wang's Blog11 小时前
Java 项目实战: 交友项目 - 安装开发工具与环境准备
java·开发语言·交友
用户212968352616812 小时前
开源了一个 Java 多智能体 LLM 框架 Baton:一个依赖,把 Agent 循环、工具调用、记忆、编排全配齐
java·llm
helmsail12 小时前
05 管理活动与选品
java