Java基础——工厂模式、单例模式、懒汉模式、饿汉模式

本文深入探讨了Java中的两种重要设计模式——工厂模式和单例模式。在工厂模式中,通过一个共同接口指向不同子类对象,实现动态创建。而在单例模式中,确保类只有一个实例,提供了全局访问点。文章详细讲解了工厂模式的实现,包括Factory类的创建和测试,以及单例模式下的懒汉和饿汉模式,强调了它们在资源管理上的不同策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

案例:

        这里有Factory类、Goods接口、Foods类、Drink类以及Others类。其中,Foods类、Drink类和Others类继承Goods接口,实现各自对应的方法。然后,在测试类中,创建Goods接口指向三个子类中的某一个,通过Factory类来判断指向哪个子类,并执行对应方法。

准备阶段:

        Goods接口内容如下:

public interface Goods {
    //定义商品价格
    void printPrice();
    //定义商品产地
    void printAddress();
}

        Foods类内如下:

public class Foods implements Goods{
    @Override
    public void printPrice() {
        System.out.println("食品的价格");
    }

    @Override
    public void printAddress() {
        System.out.println("食品的产地");
    }
}

        其他两个子类与Foods类内容相似,详细内容略。

一、工厂模式

        工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一。这种类型的设计模式属于创建型模式,创建对象时使用一个共同的接口(本案例为Goods)来指向新创建的对象(本案例为Foods、Drink和Others)。工厂模式提供了一种创建对象的最佳方式。

        1.Factory类的创建

        在Facrory类中,定义一个方法,来返回判断出对象的类型。

public class Factory {

    public Factory(){}
    //通过字符串来判断对象属于哪一个类,并返回一个Goods的对象
    public Goods GetGood(String str){
        Goods goods = null;
        if (str.equals("food")){
            goods=new Foods();
        }else if (str.equals("drink")){
            goods = new Drink();
        }else {
            goods = new Others();
        }
        return goods;
    }
}

        2.在测试类中的运行

        测试代码:

public class FactoryModeI {

    public static void main(String[] args) {
        Factory factory= new Factory();
        Goods good1 = factory.GetGood("food");
        good1.printPrice();
        good1.printAddress();
        Factory factory2= new Factory();
        Goods good2 = factory2.GetGood("drink");
        good2.printPrice();
        good2.printAddress();
    }
}

        运行结果:

        在这个模式中,我们可以任意创建一个Factory类的对象来操作,然而很多时候我们不需要创建很多的Factory类的对象。

二、单例模式

        单例模式中,我们不用创建过多的Factory类的对象,直接利用实现创建好的Factory类的对象即可。在单例模式中,又分为懒汉模式和饿汉模式。

        1.懒汉模式

        懒汉模式,当需要创建factory时,再创建factory对象。因此要判断factory对象是否为空。

public class Factory {
    //懒汉模式
    //先定义一个Factory类的属性,用于判断工厂是否需要创建
    private static Factory factory=null;
    //然后私有化Factory类的构造方法
    private Factory(){}
    //判断factory对象是否为空,为空创建新的对象
    public static Factory Instance(){
        if (factory==null) {          
            factory = new Factory();    
        return factory;
    }

    public Goods GetGood(String str){
        Goods goods = null;
        if (str.equals("food")){
            goods=new Foods();
        }else if (str.equals("drink")){
            goods = new Drink();
        }else {
            goods = new Others();
        }
        return goods;
    }
}

        2.饿汉模式

        和懒汉模式不同,饿汉模式事先就创建好了一个Factory类的对象待命,随时准备被调用。

public class Factory {
    //饿汉模式,开始就创建好对象了
    private static Factory factory=new Factory();

    private Factory(){}

    public Goods GetGood(String str){
        Goods goods = null;
        if (str.equals("food")){
            goods=new Foods();
        }else if (str.equals("drink")){
            goods = new Drink();
        }else {
            goods = new Others();
        }
        return goods;
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值