当前位置:网站首页>工厂方法模式(Factory Pattern)

工厂方法模式(Factory Pattern)

2022-06-21 05:09:00 小风的笔记

工厂方法模式(定义一个创建对象的接口,让其子类自己决定实例化哪一个工厂类,工厂模式使其创建过程延迟到子类进行)

工厂方法模式是对简单工厂模式的进一步抽象化,可以使系统在不修改原来代码的情况下引进新的产品,满足开闭原则

  • 优点
    1、用户只需要知道具体工厂的名称就可得到所要的产品,无须知道产品的具体创建过程。
    2、扩展性高,如果想增加一个产品,只要扩展一个工厂类就可以。
    3、典型的解耦框架。高层模块只需要知道产品的抽象类,无须关心其他实现类,满足迪米特法则、依赖倒置原则和里氏替换原则。

  • 缺点
    1、每次增加一个产品时,都需要增加一个具体产品类和具体工厂类,使得系统中类的个数成倍增加,在一定程度上增加了系统的复杂度
    2、抽象产品只能生产一种产品,此弊端可使用抽象工厂模式解决

  • 例子:以工厂生产华为手机和苹果手机为例,类图如下:
    在这里插入图片描述

  • 工厂方法模式的主要角色如下
    抽象工厂(Abstract Factory):提供创建实体对象的接口。
    具体工厂(Concrete Factory):实现抽象工厂中创建实体对象的接口。
    抽象产品(Abstract Product):为具体产品提供公共接口。
    具体产品(Concrete Product):实现抽象产品所定义的接口,由具体工厂来创建,和具体工厂相对应。

  • 代码实现如下

抽象工厂

/** * 抽象工厂 */
public interface Factory {
    
    // 生产手机
    Phone produce();
}

具体工厂

/** * 华为工厂 */
public class HuaweiFactory implements Factory {
    
    @Override
    public Phone produce() {
    
        System.out.println("新华为手机");
        return new HuaweiPhone();
    }
}
/** * 苹果工厂 */
public class AppleFactory implements Factory {
    
    @Override
    public Phone produce() {
    
        System.out.println("新苹果手机");
        return new ApplePhone();
    }
}

抽象产品

/** * 手机 */
public interface Phone {
    
    // 打电话
    void call();
}

具体产品

/** * 华为手机 */
public class HuaweiPhone implements Phone {
    
    @Override
    public void call() {
    
        System.out.println("用华为手机打电话...");
    }
}
/** * 苹果手机 */
public class ApplePhone implements Phone {
    
    @Override
    public void call() {
    
        System.out.println("用苹果手机打电话...");
    }
}

测试

public class Test {
    
    public static void main(String[] args) {
    
        Factory huaweiFactory = new HuaweiFactory();
        Phone huaweiPhone = huaweiFactory.produce();
        huaweiPhone.call();
        Factory appleFactory = new AppleFactory();
        Phone applePhone = appleFactory.produce();
        applePhone.call();
    }
}
// 运行结果
新华为手机
用华为手机打电话...
新苹果手机
用苹果手机打电话...
原网站

版权声明
本文为[小风的笔记]所创,转载请带上原文链接,感谢
https://blog.csdn.net/weixin_43771403/article/details/119596181