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
网友评论