工厂模式

简介: 工厂模式

1.通过接口实例化类

Map hashMap=new HashMap();
Map treeMap=new TreeMap();
如果接口的类越来越多?

2.简单工厂

public class Factory {
    public static Map creator(int which) {
        if (which == 1) {
            return new HashMap();
        } else if (which == 2) {
            new TreeMap();
        }
        return null;
    }
}
Map hashMap = Factory.creator(1);
优点:我们无需提供具体的子类类名,只需要提供一个字符串即可得到相应的实例对象。这样的话,当子类的类名更换或者增加子类时我们都无需修改客户端代码,只需要在简单工厂类上增加一个分支判断代码即可。
缺点:所有内容全部放在工厂里面了,导致工厂类比较复杂

3.工厂模式

工厂接口
public interface FactoryInterface {
    Map creator();
}
工厂实现类
public class HashMapFactory implements FactoryInterface {
    public Map creator() {
        System.out.println("hashmap");
        return new HashMap();
    }
}
public class TreeMapFactory implements FactoryInterface {
    public Map creator() {
        System.out.println("treeMap");
        return new TreeMap();
    }
}

调用通过反射:

FactoryInterface hashMapFactory = (FactoryInterface) Class.forName("com.jd.xq.HashMapFactory").newInstance();
FactoryInterface treeMapFactory = (FactoryInterface) Class.forName("com.jd.xq.TreeMapFactory").newInstance();
Map treeMap = treeMapFactory.creator();
Map hashMap = hashMapFactory.creator();


相关文章
|
jenkins 持续交付 开发工具
jenkins学习笔记之一:流水线基础语法
jenkins学习笔记之一:流水线基础语法
|
6月前
|
Ubuntu Linux 编译器
在Ubuntu Linux系统下如何搭建并安装EDK2
以上就是在Ubuntu Linux系统下搭建并安装EDK2的过程。这个过程可能会有些复杂,但只要按照步骤一步步来,应该不会有太大问题。如果在过程中遇到任何问题,都可以在网上找到相应的解决方案。希望这个指南能对你有所帮助!
238 17
|
7月前
|
算法 编译器 C++
C++20之2025年上桌我坐哪里?
C++20是C++语言的一次重大更新,引入了模块、协程、概念、范围等革命性特性。相比老版本,它显著提高了开发效率、增强了代码可读性和可维护性,并通过优化编译和运行性能提升了整体表现。这些改进推动了现代C++编程范式的发展,帮助开发者应对复杂软件工程挑战。文章回顾了C++发展历程,详细分析了C++20的新特性及其优势,展望了其未来潜力。
255 1
|
Java 容器
07 Java数组与数组操作(定义+遍历+排序+增删改查)(上)
07 Java数组与数组操作(定义+遍历+排序+增删改查)
145 8
|
设计模式 安全 Java
Java编程中的单例模式实现与应用
【8月更文挑战第31天】在Java的世界里,单例模式是构建高效且资源友好应用的基石之一。本文将深入浅出地介绍如何通过单例模式确保类只有一个实例,并提供一个全局访问点。我们将探索多种实现方法,包括懒汉式、饿汉式和双重校验锁,同时也会讨论单例模式在多线程环境下的表现。无论你是Java新手还是资深开发者,这篇文章都将为你打开一扇理解并有效应用单例模式的大门。
|
测试技术 Python
python 命令行参数 argparse详解
这篇文章是关于Python命令行参数解析库`argparse`的详细解释和使用教程。文中提供了完整的代码模板,包括如何定义命令行参数、如何添加位置参数、可选参数和布尔参数,以及如何解析和使用这些参数。文章还包含了示例代码和测试用例,以展示如何在实际程序中应用`argparse`库。
208 0
|
存储 缓存 JSON
Go Modules:Go语言依赖管理的新篇章
Go Modules是Go 1.11引入的依赖管理标准,解决`GOPATH`的依赖冲突问题。
242 1
|
负载均衡 网络协议 算法
iptables 具体介绍
iptables 具体介绍
计算机网络:数据链路层(广域网、PPP协议、HDLC协议)
计算机网络:数据链路层(广域网、PPP协议、HDLC协议)
570 0
|
SQL 存储 分布式计算
AnalyticDB MySQL带你深入浅出SQL优化器原理
SQL优化器是数据库、数据仓库、大数据等相关领域中最复杂的内核模块之一,它是影响查询性能的关键因素。比如大家熟知的开源产品 MySQL、PostgreSQL、Greenplum DB、Hive、Spark、Presto,都有自己的优化器。本文将由浅入深地带读者了解其中技术原理。