Java设计模式之工厂模式

本文详细介绍了Java设计模式中的工厂模式,包括简单工厂模式、工厂方法模式和抽象工厂模式。简单工厂模式通过静态方法根据参数创建不同子类实例,但不利于扩展。工厂方法模式将对象实例化交给子类工厂,遵循开闭原则。抽象工厂模式提供更抽象的工厂,允许创建相关产品族,但增加新产品族仍需修改工厂逻辑。

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

Java设计模式之工厂模式

一、简单工厂模式

简单工厂模式(Simple Factory Patterm):又称为静态工厂方法(Static Factory Method)模式,它属于类的创建型模式。在简单工厂模式中,可以根据参数的不同返回不同类的实例。简单工厂模式专门定义一个类来负责创建其他类的实例,被创建的实例通常具有共同的父类。
在这里插入图片描述
例如:DateFormart 类在获取实例的时候可以看到,在获取的参数不同时(在判断timeStyle datestyle)返回不同DateFormart的子类。这就是简单工厂模式的一个简单的应用。

public class SimpleFactory {

    public static Product createProduct(String type) {
        if (type.equals("A"))
            return new ProductA();
        else
            return new ProductB();
    }//工厂,根据传入的参数不同,来判断创造什么实例

    public static void main(String[] args) {
        Product product = SimpleFactory.createProduct("A");
        product.print();
    }//测试主方法
}

    abstract class Product{
        public abstract void print();
    }//一个抽象的产品类,是所有产品类的父类



    class ProductA extends Product{
         @Override
         public void print() {
             System.out.println("产品A");
         }
     }

     

     class ProductB extends Product{
        @Override
        public void print() {
            System.out.println("产品B");
        }
    }
    
    //产品子类的具体实现

这里就是一个简单工厂的例子

优点:在实现对象的创建和使用时,完全把创建交给了工厂类来实例,更加的模块话。

缺点: 工厂类不够灵活,每新增一个产品就要去修改判断的条件。违背开闭原则。

二、工厂模式

定义:定义一个用于创建对象的接口,让子类决定实例化哪个类。工厂方法使一个类的实例化延迟到子类。

在简单工厂模式中,我们如果新增一个产品就要修改工厂的类,这样导致维护与修改困难,且违背了Java开发的开闭原则,所以就有了工厂模式

工厂模式就是把一个具体对象的实例化交给了对应的子类工厂来做,
所以子新增一个产品时我们就直接新增一个产品的工厂。

例如:华为有一家生产手机的工厂,但是现在华为想生产耳机,是把原来手机的生产线改为耳机呢,还是建一个生产耳机的工厂呢。

明显再建一个工厂会更加的省事。

在这里插入图片描述
在jdk中Collection接口,通过LinkedList 或者ArrayList子工厂来创建对象,最后生产最终产品。

public class FactoryPattern {}


    interface Phone{
        void print();
    }
    
    //创建手机的接口
    class iPhone implements Phone{
        @Override
        public void print() {
            System.out.println("iphone");
        }
    }
    //生产具体的实例
    
    class HuaWeiPhone implements  Phone{
        @Override
        public void print() {
            System.out.println("HuaWeiPhone");
            
        }
    }
    
    
    interface Factory{
        Phone createPhone();
    }
    //工厂的接口
    
    
    class IPhoneFactory implements Factory{
        @Override
        public Phone createPhone() {
            return new iPhone();
        }
    }
    
    //子工厂
    
    class HuaWeiFactory implements Factory{
        @Override
        public Phone createPhone() {
            return new HuaWeiPhone();
        }
    }

//子工厂

三、抽象工厂模式

抽象工厂模式与工厂模式的区别不大,只是在定义子工厂是,工厂更加的抽象,使得子工厂与成品并不是一一对应的关系。

注意:一旦新增新的产品体系就要回去修改工厂的逻辑结构。
如果抽象工厂模式一个工厂对应一个实例那么抽象工厂模式接等于工厂模式

在这里插入图片描述
抽象工厂模式也是违反开闭原则的。

public class abstractFactory {
}
//抽象的工厂
interface AbstractFactory{
    Phone createPhone(String name);
    Mask createMask(String name);
}



//具体的工厂
class SuperFactory implements AbstractFactory{

    @Override
    public Phone createPhone(String name) {
        return new iPhone();
    }

    @Override
    public Mask createMask(String name) {
        return new N95();
    }
}


//产品大类
interface Phone1{ }

class iPhone implements Phone1{ }

interface Mask1{ }

class N95 implements Mask1{ }

感谢阅读!!!!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值