设计模式——工厂模式

本文详细介绍了工厂模式、简单工厂、工厂方法模式和抽象工厂模式,以及它们在软件设计中的作用,包括创建对象的灵活性、解耦和复用代码。通过实例展示了如何在Java中实现这些设计模式。
摘要由CSDN通过智能技术生成

  • 设计模式是一种经过时间实践证明有效解决软件设计问题的方法,提供了一套经验丰富的解决方案,可以用于解决常见的软件设计问题,从而使得代码更加灵活,可读性更高,让代码更容易维护和扩展。
  • 设计模式的类型分为三种:
    • 创建型:创建型关注对象的创建机制,旨在通过各种方式创建对象,而不是直接在代码中使用new关键字。
    • 结构型:结构型关注对象和类之间的关系,旨在通过组合类和对象形成更大的结构,以便更好的实现系统的结构和功能。
    • 行为型:行为型关注对象之间的通信和协作方式,旨在定义对象之间的算法和责任分配。
  • 解耦:降低系统中的不同模块,组件或对象之间的依赖关系,使得他们之间的耦合度减少。

工厂模式包含模块

  • 抽象产品(Product):定义通用产品接口,所有具体产品都要实现这个接口。
  • 具体产品(Concrete Product):实现抽象产品接口的具体产品类。
  • 抽象工厂(Abstract Factory):定义创建产品的方法,可以是接口或者抽象类。
  • 具体工厂(Concrete Factory):实现抽象工厂接口,负责具体产品的创建。

简单工厂

  • 定义:由一个工厂对象决定创建出哪一种产品类的实例。(不属于23种设计模式
  • 优势:只需要传入工厂类参数,对于如何创建对象的逻辑无需关心。
  • 弊端:只能对少量对象进行管理,如果要增加新的产品时需要修改工厂类的判断逻辑,不易于扩展过于复杂的产品结构。
  • 抽象产品-ICourse
public interface ICourse {
    /**
     * 课程录制
     */
    void record();
}
  • 具体产品1-JavaCourse
public class JavaCourse implements ICourse{
    @Override
    public void record() {
        System.out.println("java课程录制");
    }
}
  • 简单工厂
public class CourseSimpleFactory {
    public ICourse create(Class<? extends ICourse> clazz) {
        try {
            if (null != clazz) {
                return (ICourse) clazz.newInstance();
            }
        } catch (InstantiationException | IllegalAccessException e) {
            throw new RuntimeException(e);
        }
        return null;
    }
}

工厂方法模式

  • 类型:创建型
  • 定义:工厂模式是定义一个创建对象的接口,但让实现这个接口的类来决定实例化哪个类,工厂方法让类的实例化延迟到子类中进行。(工厂方法可以根据需求动态创建对象,而不需要在代码中直接使用具体类来创建对象)
  • 应用场景:创建对象需要大量复用代码。
  • 优势:底层代码无需关心产品类实例如何被创建,实现等细节。
  • 弊端:类的数量过多,增加代码结构的复杂度,增加系统的抽象性和理解难度。
  • 抽象工厂
public interface ICourseFactory {
    public ICourse create();
}

  • 工厂接口实现
public class JavaCourseFactory implements ICourseFactory{
    @Override
    public ICourse create() {
        return new JavaCourse();
    }
}
  • 测试
    @Test
    public void testJavaCourseCreate(){
        ICourseFactory iCourseFactory = new JavaCourseFactory();
        ICourse course = iCourseFactory.create();
        course.record();
    }
  • 工厂模式类图
    工厂模式类图

抽象工厂模式

  • 定义:提供一个创建一系列相关或者相互依赖对象的接口,无需指定他们具体的类。
  • 弊端:规定了所有可能被创建的产品集合,产品族中扩展新的产品很困难,需要修改抽象工厂的接口。(违反开闭原则)
  • 优势:将具体产品在应用层代码隔离,无需关心创建细节;将一个系列的产品族统一到一起创建。
  • 应用场景
    • 应用层不依赖于产品类实例如何被创建,实现等细节;
    • 强调一系列相关的产品对象一起使用创建对象需要大量重复代码;
    • 提供一个产品类库,所有产品以同样的接口出现,从而使客户端不依赖于具体实现。
  • 产品族:指一组相关或相互依赖的产品集合。这些产品通常具有共同的主题、特性或用途,可以在同一个环境下相互配合使用。
    • 假设某个公司生产手机及其配件,那么手机是一个产品,而手机壳、充电器、耳机等就是手机配件。这些产品共同构成了手机产品族,因为它们在功能、使用场景、品牌等方面有着共同的特点和关联。
  • 抽象工厂接口
public abstract class AbstractCourseFactory {
    public void init() {
        System.out.println("初始化基础数据");
    }

    public abstract INote createNote();

    public abstract IVideo createVideo();
}

  • 抽象工厂实现类
public class JavaCourseFactory extends AbstractCourseFactory{
    @Override
    public INote createNote() {
        super.init();
        return new JavaNote();
    }

    @Override
    public IVideo createVideo() {
        super.init();
        return new JavaVideo();
    }
}
  • 产品族:note
public interface INote {
    void edite();
}
public class JavaNote implements INote {
    @Override
    public void edite() {
        System.out.println("编辑java笔记");
    }
}
  • 产品族:video
public interface IVideo {
    void play();
}

public class JavaVideo implements IVideo{
    @Override
    public void play() {
        System.out.println("播放java视频");
    }
}
  • 应用层调用
    @Test
    public void testCreateJavaFactory(){
        AbstractCourseFactory factory = new JavaCourseFactory();
        factory.createNote().edite();
        factory.createVideo().play();
    }
  • 抽象工厂类图:
    抽象工厂类图
  • 23
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值