java设计模式(二)——简单工厂模式

一、模式介绍

1、工厂模式

工厂模式属于创建型模式,即解决的是如何创建一个类的对象问题。

常见的创建对象是自己使用new,这样是不是感觉有点普通,

如果有一种高逼格的方式可以将对象创建出来,是不是让人刮目相看。

工厂模式就能让你做到这一点。

2、分类

简单工厂模式

工厂方法

抽象工厂

3、使用场景

1.不想自己new对象,防止这个类改变的时候在new的地方到处去改,麻烦且容易遗漏

2.要创建类的对象构建过程非常复杂,不想在代码的各个地方将这么复杂的构建过程反复书写

3.这个类的对象在构建过程中依赖了很多其他的类,而你无法在调用的地方提供

二、简单工厂模式

1、实现步骤

第一步:定义产品抽象类,比如鞋子(Shoes.class)
java 复制代码
// 1、定义鞋 产品抽象基类
abstract class Shoes {
    // 展示logo
    public abstract void showLogo();
}
第二步:定义具体产品类,继承产品抽象类。比如飞跃牌鞋子(FeiYueShoes.class)、回力牌鞋子(HuiLiShoes.class)
java 复制代码
//2.定义具体品牌的鞋类,继承鞋抽象基类
public class FeiYueShoes extends Shoes {

    @Override
    public void showLogo() {
        System.out.println("这是飞跃鞋");
    }
}
java 复制代码
//2.定义具体品牌的鞋类,继承鞋抽象基类
public class HuiLiShoes extends Shoes {
    @Override
    public void showLogo() {
        System.out.println("这是回力鞋");
    }
}
第三步:定义简单工厂类,使用一个静态工厂方法根据不同产品条件生成不同产品。比如鞋厂(ShoesFactory.class)
java 复制代码
// 3、定义简单工厂方法类,使用一个静态工厂方法来根据不同的品牌条件来产生不同品牌的鞋
public class ShoesFactory {

    // 静态工厂方法,生产鞋子
    public static Shoes produceShoes(String brand){

        Shoes shoes = null;
        switch (brand){
            case "feiyue":
                shoes = new FeiYueShoes();
                break;
            case "huili":
                shoes = new HuiLiShoes();
                break;
            default:
                System.out.println("错误品牌");
                break;
        }
        return shoes;
    }
}
第四步:使用简单工厂模式,生成产品。比如(ShoesFactoryExample.class)
java 复制代码
// 4、使用简单工厂模式,生成产品
public class ShoesFactoryExample {
    public static void main(String[] args) {
        //生产飞跃鞋子
        Shoes feiYueShoes = ShoesFactory.produceShoes("feiyue");
        feiYueShoes.showLogo();
        //生产回力鞋子
        Shoes huiLiShoes = ShoesFactory.produceShoes("huili");
        huiLiShoes.showLogo();
    }
}

2、总结

简单工厂模式的出现,使我们通过传入不同的参数类型,可以创建不同类型的对象实例。
将对象的构建完全交给简单工厂方法类(ShoesFactory.class)

3、缺点

违法开闭原则(对扩展开放,对修改关闭),破坏其内聚性,给维护带来额外开支,
比如新增一种产品(老北京布鞋)就要修改静态工厂方法,而不是扩展,这就是所谓违反了开闭原则
工厂方法模式解决了这一问题。
相关推荐
liuliuliuliuyujie2 分钟前
ArrayList练习
java
全职计算机毕业设计5 分钟前
基于springboot的工作绩效管理系统的设计与实现+文档
java·spring boot·后端
java6666688889 分钟前
Java中的内存数据库与缓存技术
java·数据库·缓存
量化交易学徒22 分钟前
【DevOps】Java内存分配与JVM参数详解
java·开发语言·jvm·参数调优
六月的雨__23 分钟前
房屋租赁管理小程序的设计
java·sql·学习·小程序
zouhuu1 小时前
面试题001-Java-Java基础
java·java面试·java面试题·java基础题
weixin_8368695201 小时前
使用Java构建智能物联网系统
java·物联网·struts
Mero技术博客1 小时前
第四节:如何使用注解方式从IOC中获取bean(自学Spring boot 3.x的第一天)
java·spring boot·后端·spring·微服务
花花鱼1 小时前
spring boot (shiro)+ websocket测试连接不上的简单检测处理
java·spring boot·后端
CodeLinghu1 小时前
【设计模式】观察者模式(定义 | 特点 | Demo入门讲解)
windows·观察者模式·设计模式