工厂模式与抽象工厂模式

16 篇文章 1 订阅
2 篇文章 0 订阅

点击可进入 本文章B站对应视频

工厂模式

介绍

工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。

在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。

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

例子

请添加图片描述

代码简述

第一步 创造一个工厂接口 接口有 比如 生产手机的功能
第二步 创建两个工厂 去实现接口 中的方法 方法返回创造的对象 比如手机
第三步 创造手机接口 手机有自己的功能 比如 print 输出自己名字
第四步 创造两个手机 实现手机接口

第五步 main 方法内进行测试
用工厂接口 去接受一个工厂的实例化
(意思为选择 工厂 注:这里用的是工厂接口去接受对象 有一点类似向上转型 )
用手机接口 去接受一个手机的实例
使用手机功能

我的代码中有添加构造函数中的语言 方便使用的时候更加直观
强力建议手打一次代码 手打一次可以更快的懂

代码
package chouxiang;

public class text {//测试类
    public static void main(String[] args) {
        Factory1 factory=new  AppleFactory();//获取工厂
        iPhone phone=factory.createiPhone();//生产手机
        phone.print();//手机
    }
}
interface Factory1{//工厂接口
    iPhone createiPhone();
}
class HuaweiFactory implements Factory1{//华为工厂
    public HuaweiFactory() {
        System.out.println("欢迎来到华为工厂 我可以生产华为手机");
    }
    @Override
    public iPhone createiPhone() {
        return new HuaweiiPhone();
    }
}
class  AppleFactory implements Factory1{// Apple工厂
    public  AppleFactory() {
        System.out.println("欢迎来到 Apple工厂 我可以生产 Apple手机");
    }
    @Override
    public iPhone createiPhone() {
        return new  AppleiPhone();
    }
}
interface iPhone {//手机类接口
    void print();
}
class HuaweiiPhone implements iPhone{//Huawei手机实现
    public HuaweiiPhone() {
        System.out.println("华为手机已经产出 我有  print  输出手机名字功能 ");
    }
    @Override
    public void print() {
        System.out.println("华为手机");
    }
}
class  AppleiPhone implements iPhone{// Apple手机实现

    public  AppleiPhone() {
        System.out.println(" Apple手机已经产出 我有  print  输出手机名字功能 ");
    }

    @Override
    public void print() {
        System.out.println(" Apple手机");
    }
}

结果

欢迎来到 Apple工厂 我可以生产 Apple手机
 Apple手机已经产出 我有  print  输出手机名字功能 
 Apple手机

优缺点

优点: 1、一个调用者想创建一个对象,只要知道其名称就可以了。
2、扩展性高,如果想增加一个产品,只要扩展一个工厂类就可以。
3、屏蔽产品的具体实现,调用者只关心产品的接口。
缺点:每次增加一个产品时,都需要增加一个具体类和对象实现工厂,使得系统中类的个数成倍增加,在一定程度上增加了系统的复杂度,同时也增加了系统具体类的依赖。

抽象工厂模式

介绍

抽象工厂模式(Abstract Factory Pattern)是围绕一个超级工厂创建其他工厂。该超级工厂又称为其他工厂的工厂。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。

在抽象工厂模式中,接口是负责创建一个相关对象的工厂,不需要显式指定它们的类。每个生成的工厂都能按照工厂模式提供对象。

普通工厂是简单工厂的进化版本
从 固定的12或者13变成了1n的关系
而抽象工厂是普通工厂的进化版本
通过添加多个新的大类 将1
n变成了n*n的关系

例子

请添加图片描述

代码简介

第一步 创造一个超级工厂接口 里面定义了不只一种的成果类 比如可以有生产手机 也可以有生产口罩
第二步 创建两个工厂 去实现接口 中的方法 方法返回创造的对象
第三步 创造手机接口 手机有自己的功能 比如 print 输出自己名字
第四步实现手机接口 (我下面代码因为和普通工厂里的代码是一个包下的 所以直接调用了普通工厂里的手机实例)
第五步 创造口罩接口 口罩有自己的功能
第六步实现手机接口

第七步 main 方法内进行测试
用工厂接口 去接受一个工厂的实例化
用手机或口罩接口 去接受一个手机或口罩的实例
使用手机或口罩的功能

代码
package chouxiang;

public class text1 {
    public static void main(String[] args) {
        Factory factory =new FactoryB();//类似于向上转型
        Mask mask= factory.createMask();
        mask.method();
    }
}
interface Factory{//工厂类
    public iPhone createiPhone();
    public Mask createMask();
}
class FactoryA implements Factory{
    public FactoryA() {
        System.out.println("欢迎来到 工厂A  我有 createiPhone()  生产华为手机  和 createMask() 生产N95口罩功能  ");
    }
    @Override
    public iPhone createiPhone() {
        return new  HuaweiiPhone();
    }

    @Override
    public Mask createMask() {
        return new N95Mask();
    }
}
class FactoryB implements Factory{
    public FactoryB() {
        System.out.println("欢迎来到 工厂B  我有 createiPhone()  生产 Apple手机  和 createMask() 生产KN90口罩功能  ");
    }
    @Override
    public iPhone createiPhone() {
        return new   AppleiPhone();
    }

    @Override
    public Mask createMask() {
        return new KN90Mask();
    }
}
interface Mask{//口罩类
    void method();
}
class N95Mask implements Mask{
    public N95Mask() {
        System.out.println("N 95口罩已经产出 我有 method   输出口罩功能 ");
    }
    @Override
    public void method() {
        System.out.println("我是N95Mask,我是个口罩");
    }
}
class KN90Mask implements Mask{
    public KN90Mask() {
        System.out.println("KN90口罩已经产出 我有 method 输出口罩功能 ");
    }
    @Override
    public void method() {
        System.out.println("我是KN90Mask,我是一个大口罩");
    }
}

注意 抽象工厂中会有部分调用一工厂的方法
抽象工厂就是工厂方法的升级 如果只有一个工厂 抽象工厂等同于工厂

结果

欢迎来到 工厂B  我有 createiPhone()  生产 Apple手机  和 createMask() 生产KN90口罩功能  
KN90口罩已经产出 我有 method 输出口罩功能 
我是KN90Mask,我是一个大口罩

优缺点

优点:当一个产品族中的多个对象被设计成一起工作时,它能保证客户端始终只使用同一个产品族中的对象。

缺点:产品族扩展非常困难,要增加一个系列的某一产品,既要在抽象的 Creator 里加代码,又要在具体的里面加代码。

  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zzsaixuexi

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值