JAVA(九)工厂模式

概要

  • 工厂模式提供了一种创建对象的方法,而无需指定要创建的具体类
  • 通过使用工厂模式,可以将对象的创建逻辑封装在一个工厂类中,而不是在客户端代码中直接实例化对象,这样可以提高代码的可维护性和可扩展性。

类型

  • 简单工厂模式:简单工厂模式不是一个正式的设计模式,但它是工厂模式的基础。它使用一个单独的工厂类来创建不同的对象,根据传入的参数决定创建哪种类型的对象。
  • 工厂方法模式:工厂方法模式定义了一个创建对象的接口,但由子类决定实例化哪个类。工厂方法将对象的创建延迟到子类。
  • 抽象工厂模式:抽象工厂模式提供一个创建一系列相关或互相依赖对象的接口,而无需指定它们具体的类。

意图

定义一个创建对象的接口,让其子类决定实例化哪一个具体的类。工厂模式使对象的创建过程延迟到子类。

何时使用

当我们需要在不同条件下创建不同实例时。

关键代码

对象的创建过程在子类中实现。

应用实例

  • 汽车制造:客户需要一辆汽车,只需从工厂提货,而不需要关心汽车的制造过程及其内部实现。

优点

  • 调用者只需要知道对象的名称即可创建对象。
  • 扩展性高,如果需要增加新产品,只需扩展一个工厂类即可。
  • 屏蔽了产品的具体实现,调用者只关心产品的接口。

缺点

每次增加一个产品时,都需要增加一个具体类和对应的工厂,使系统中类的数量成倍增加,增加了系统的复杂度和具体类的依赖。

代码示例

简单工厂模式

建立一个工厂类,对实现了同一接口的一些类进行实例的创建。

  • 手机接口类
//手机接口类
public interface Phone {
    public void call();
}
  • 两个手机实现类
//手机实现类
public class Iphone implements Phone{
    @Override
    public void call(){
        System.out.println("用苹果手机打电话!");
    }
}
//手机实现类
public class Mphone implements Phone{
    @Override
    public void call(){
        System.out.println("用小米手机打电话!");
    }
}
  • 生产手机的工厂类
//生产手机的工厂类
public class PhoneFactory {
    public Phone create(String type){
        if (type.equals("Iphone")){
            return new Iphone();
        }else if (type.equals("Mphone")){
            return new Mphone();
        }else
            return null;
    }
}
  • 测试类
public class PhoneTest {

    public static final String Iphone = "Iphone";

    public static final String Mphone = "Mphone";

    public static void main(String[] args) {
        // 生产小米手机
        PhoneFactory factory1 = new PhoneFactory();
        factory1.create(Mphone).call();

        // 生产苹果手机
        PhoneFactory factory2 = new PhoneFactory();
        factory2.create(Iphone).call();
    }
}
  • 运行结果:
用小米手机打电话!
用苹果手机打电话!

工厂方法模式

对简单工厂模式的改进,使用一个工厂接口,创建多个工厂类,每个工厂创建对应的对象。一旦需要增加新的功能,直接增加新的工厂类就可以了,不需要修改之前的代码。有利于代码的维护和扩展。

  • 工厂接口
public interface PhoneFactory_1 {
    public Phone create();
}
  • 小米手机工厂
public class MPhoneFactory_1 implements PhoneFactory_1{
    @Override
    public Phone create() {
        return new Mphone();
    }
}
  • 苹果手机工厂
public class IPhoneFactory_1 implements PhoneFactory_1{
    @Override
    public Phone create() {
        return new Iphone();
    }
}
  • 测试类
public class PhoneTest_1 {
    public static void main(String[] args) {
        // 生产苹果手机
        PhoneFactory_1 factory1 = new IPhoneFactory_1();
        factory1.create().call();

        // 生产小米手机
        PhoneFactory_1 factory2 = new MPhoneFactory_1();
        factory2.create().call();
    }
}
  • 运行结果
用苹果手机打电话!
用小米手机打电话!
posted @   一年都在冬眠  阅读(18)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示