Java设计模式之工厂模式

Java设计模式之工厂模式

(本文是个人见解,如有问题请留言)

简介

工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。

代码示例

假如我们需要设计一个电脑工厂,现在这个电脑工厂有两条流水线,一条是台式电脑,一条是服务器电脑,用户可以选择自己需要的主要配置,内存、CPU、显卡、硬盘再加上选择的类型工厂就能输出用户想要的电脑。

  • 首先我们建立电脑工厂的基类

    public abstract class BaseComputer {
    
        public abstract String getRAM();
    
        public abstract String getNvidia();
    
        public abstract String getHDD();
    
        public abstract String getCPU();
    
        @Override
        public String toString() {
            return "RAM= " + this.getRAM() + "NVIDIA=" + this.getNvidia() + ", HDD=" + this.getHDD() + ", CPU=" + this.getCPU();
        }
    }
    
  • 接着我们加入桌面电脑的流水线,

    public class DesktopComputer extends BaseComputer {
    
    
        private String ram;
        private String nvidia;
        private String hdd;
        private String cpu;
    
        public DesktopComputer(String ram, String nvidia, String hdd, String cpu) {
            this.ram = ram;
            this.nvidia = nvidia;
            this.hdd = hdd;
            this.cpu = cpu;
        }
    
    
        @Override
        public String getRAM() {
            return this.ram;
        }
    
        @Override
        public String getNvidia() {
            return this.nvidia;
        }
    
        @Override
        public String getHDD() {
            return this.hdd;
        }
    
        @Override
        public String getCPU() {
            return this.cpu;
        }
    }
    
    
  • 服务器级电脑

    public class ServerComputer extends BaseComputer {
    
    
        private String ram;
        private String nvidia;
        private String hdd;
        private String cpu;
    
        public ServerComputer(String ram, String nvidia, String hdd, String cpu) {
            this.ram = ram;
            this.nvidia = nvidia;
            this.hdd = hdd;
            this.cpu = cpu;
        }
    
    
        @Override
        public String getRAM() {
            return this.ram;
        }
    
        @Override
        public String getNvidia() {
            return this.nvidia;
        }
    
        @Override
        public String getHDD() {
            return this.hdd;
        }
    
        @Override
        public String getCPU() {
            return this.cpu;
        }
    }
    
  • 模拟工厂入口

    public class ComputerFactory {
    
        public static BaseComputer getBaseComputer(String type, String ram, String nvidia, String hdd, String cpu) {
    
            switch (type) {
                case "DesktopComputer":
                    return new DesktopComputer(ram, nvidia, hdd, cpu);
                case "ServerComputer":
                    return new ServerComputer(ram, nvidia, hdd, cpu);
                default:
                    break;
            }
    
            return null;
        }
    }
    
  • 建立测试类

    public class TestFactory {
    
    
        public static void main(String[] args) {
            BaseComputer desktop = ComputerFactory.getBaseComputer("DesktopComputer", "16 GB", "gtx2060", "1 TB", "4.4 GHz");
            BaseComputer server = ComputerFactory.getBaseComputer("ServerComputer", "32 GB", "5700Tx", "1 TB", "4.9 GHz");
            System.out.println("Factory DesktopComputer Config::" + desktop);
            System.out.println("Factory ServerComputer Config::" + server);
        }
    }
    
  • 输出

    Factory DesktopComputer Config::RAM= 16 GBNVIDIA=gtx2060, HDD=1 TB, CPU=4.4 GHz
    Factory ServerComputer Config::RAM= 32 GBNVIDIA=5700Tx, HDD=1 TB, CPU=4.9 GHz
    
总结

工厂模式,定义了一个创建对象的接口,让其子类决定实例化那个类,工厂模式使其创建过程延迟到子类进行,解决了接口选择的问题,让我们明确的计划不同条件下创建不同实例,具体到代码上的优点,一个调用者想要创建一个对象只要知道他的名称就行了,扩展性高如果想要增加一个产品,只要扩展一个工厂类就行了,最后就是屏蔽了产品的具体实现,调用者只用关心产品的接口就行了。

链接
本文代码仓库地址:https://gitee.com/singlekingdom/JavaDesignPatterns.git
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值