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

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

相关推荐
I_LPL2 小时前
day50 代码随想录算法训练营 图论专题3
java·算法·深度优先·图论·求职面试
维齐洛波奇特利(male)2 小时前
IDEA 实例类多开bug:勾选后还是只能运行一个类
java·bug·intellij-idea
滴滴答滴答答2 小时前
机考刷题之 7 LeetCode 240 搜索二位矩阵Ⅱ
java·算法·leetcode
MX_93592 小时前
Spring的xml方式声明式事务控制
xml·java·后端·spring
进击的荆棘2 小时前
优选算法——模拟
java·开发语言·算法·模拟
徐子童2 小时前
ArrayList和LinkedList的区别
java·开发语言·数据结构·高频面试题
fengxin_rou2 小时前
redis主从和集群一致性、哨兵机制详解
java·开发语言·数据库·redis·缓存
Olafur_zbj2 小时前
【AI】LLM上下文拼接
java·开发语言·spring·llm·context
geovindu2 小时前
python: Builder Pattern
python·设计模式·建造者模式