设计模式之简单工厂模式(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、屏蔽产品的具体实现,调用者只关心产品的接口。

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

相关推荐
jwt7939279376 小时前
基于SpringBoot和Leaflet的行政区划地图掩膜效果实战
java·spring boot·后端
亚马逊云开发者6 小时前
IDEA 里装个 AI 助手:Amazon Q Developer for JetBrains 实测体验
java·ide·intellij-idea
imuliuliang6 小时前
Java MySQL 连接
java·mysql·adb
liuyao_xianhui6 小时前
优选算法_岛屿的最大面积_floodfill算法_C++
java·开发语言·数据结构·c++·算法·leetcode·链表
庞轩px7 小时前
后端开发面试题总结
java·jvm·面试·并发编程·mysql与redis·spring与消息队列·网络协议与设计模式
希望永不加班7 小时前
SpringBoot 整合 MyBatis 完整实战
java·spring boot·后端·spring·mybatis
wuqingshun3141597 小时前
说说事务的隔离级别
java·spring
API快乐传递者7 小时前
1688商品数据接口:供应链ERP数字化的核心引擎
java·大数据·运维
鱼鳞_7 小时前
Java学习笔记_Day21
java·笔记·学习
码云数智-大飞7 小时前
Java异常体系深度解析:驾驭Checked与Unchecked的艺术
java