工厂模式与单例模式

以下是一个简单的示例代码,演示了工厂模式和单例模式的用法:

java 复制代码
// 定义产品接口
interface Product {
    void use();
}

// 具体产品1
class ConcreteProduct1 implements Product {
    public void use() {
        System.out.println("使用具体产品1");
    }
}

// 具体产品2
class ConcreteProduct2 implements Product {
    public void use() {
        System.out.println("使用具体产品2");
    }
}

// 工厂类
class Factory {
    // 根据类型创建产品对象
    public static Product createProduct(String type) {
        if (type.equals("1")) {
            return new ConcreteProduct1();
        } else if (type.equals("2")) {
            return new ConcreteProduct2();
        } else {
            return null;
        }
    }
}

// 单例类
class Singleton {
    private static Singleton instance = null;
    // 私有构造函数
    private Singleton() {}
    // 获取实例的方法
    public static Singleton getInstance() {
        if (instance == null) {
            instance = new Singleton();
        }
        return instance;
    }
    public void showMessage() {
        System.out.println("单例模式示例");
    }
}

// 主程序
public class Demo {
    public static void main(String[] args) {
        // 使用工厂模式创建产品对象
        Product product1 = Factory.createProduct("1");
        product1.use();

        Product product2 = Factory.createProduct("2");
        product2.use();

        // 使用单例模式
        Singleton singleton1 = Singleton.getInstance();
        singleton1.showMessage();

        Singleton singleton2 = Singleton.getInstance();
        singleton2.showMessage();
    }
}

运行结果:

复制代码
使用具体产品1
使用具体产品2
单例模式示例
单例模式示例

以上示例中,使用工厂模式创建了具体产品对象,并调用了它们的方法。同时使用了单例模式创建了一个实例,并多次调用了该实例的方法,保证了获取的实例是同一个。

相关推荐
M--Y16 分钟前
LangGraph 工作流模式
开发语言·javascript·python·langchain·大模型·llm·langgraph
吴可可1232 小时前
WScript Shell操作注册表详解
开发语言
纪念 2292 小时前
C++ 算法基础 (差分)
开发语言·c++·算法
johnjincaaaa5 小时前
猿人学第 18 题「jsvmp 洞察先机」逆向通关实录
javascript·后端
码农小河667 小时前
基于PHP的电商后台蜜罐系统
开发语言·php
starzy19907 小时前
深入理解Scala柯里化函数:函数链式变换
开发语言·scala
ShineWinsu7 小时前
对于Qt:QTreeWidget常见属性以及QTreeWidgetItem类的解析
开发语言·c++·qt·gui·客户端·多叉树·qtreewidget
落羽的落羽8 小时前
【C++】C++17的主要特性
linux·服务器·开发语言·c++·算法·机器学习
FungLeo8 小时前
成为全栈·Vue 管理后台篇·分类树与标签管理:层级数据如何落到管理界面
前端·javascript·vue.js·分类树·naive ui·标签管理·前端数据结构
总要学点什么8 小时前
第108篇:三维特效-图片轨迹线效果——把贴图滚成一串箭头,想用它的本色反而整条消失
开发语言·javascript·ecmascript·gis·webgl·材质·cesium