设想模式 – 工场模式

发布日期:2019-07-23 19:42:48 阅读数: 318次 来源: 作者:

  • 工场方式模式一种建立对象的模式,它被普遍使用在jdk中以和Spring和Struts框架中;
  • 工场方式模式基于"输入",使用在超类和多个子类之间的环境,这种模式将建立对象的义务转移到工场类;
  • 起首让我们进修一下若何在Java中使用工场方式模式而且进修到工场方式的长处,别的工场方式模式也普遍使用在jdk中;
  • 超类能够是接口、笼统类、父类,本例中将通过重写 toString() 方式来注释工场方式模式;

实例

package com.journaldev.design.model; public abstract class Computer { public abstract String getRAM(); public abstract String getHDD(); public abstract String getCPU(); @Override public String toString(){ return "RAM= "+this.getRAM()+", HDD="+this.getHDD()+", 亚博CPU="+this.getCPU(); } }

工场设想模式子类

假设子类 PC 和 Server 实现了 Computer:

实例

package com.journaldev.design.model; public class PC extends Computer { private String ram; private String hdd; private String cpu; public PC(String ram, String hdd, String cpu){ this.ram=ram; this.hdd=hdd; this.cpu=cpu; } @Override public String getRAM() { return this.ram; } @Override public String getHDD() { return this.hdd; } @Override public String getCPU() { return this.cpu; } }

Server 也实现了 Computer:

实例

package com.journaldev.design.model; public class Server extends Computer { private String ram; private String hdd; private String cpu; public Server(String ram, String hdd, String cpu){ this.ram=ram; this.hdd=hdd; this.cpu=cpu; } @Override public String getRAM() { return this.ram; } @Override public String getHDD() { return this.hdd; } @Override public String getCPU() { return this.cpu; } }

工场类

此刻有了多个子类和超类,接下来能够建立工场类了:

实例

package com.journaldev.design.factory; import com.journaldev.design.model.Computer; import com.journaldev.design.model.PC; import com.journaldev.design.model.Server; public class ComputerFactory { public static Computer getComputer(String type, String ram, String hdd, String cpu){ if("PC".equalsIgnoreCase(type)) return new PC(ram, hdd, cpu); else if("Server".equalsIgnoreCase(type)) return new Server(ram, hdd, cpu); return null; } }

需要重点指出的是:

  • 工场类能够是单例的,getComputer 能够是静态的;
  • getComputer 是工场类的方式,且基于不异的参数类型前往了分歧的对象;

接下来是一个简单的测试客户端法式,它利用上面的工场设想模式实现。

实例

package com.journaldev.design.test; import com.journaldev.design.abstractfactory.PCFactory; import com.journaldev.design.abstractfactory.ServerFactory; import com.journaldev.design.factory.ComputerFactory; import com.journaldev.design.model.Computer; public class TestFactory { public static void main(String[] args) { Computer pc = ComputerFactory.getComputer("pc","2 GB","500 GB","2.4 GHz"); Computer server = ComputerFactory.getComputer("server","16 GB","1 TB","2.9 GHz"); System.out.println("Factory PC Config::"+pc); System.out.println("Factory Server Config::"+server); } }

输出:

Factory PC Config::RAM= 2 GB, HDD=500 GB, CPU=2.4 GHz
Factory Server Config::RAM= 16 GB, HDD=1 TB, CPU=2.9 GHz

工场设想模式的长处

  • 面向接口编程,表现了面向对象的思惟;
  • 将建立对象的工作转移到了工场类;

JDK 中的工场设想模式实例

  • java.util.Calendar, ResourceBundle and NumberFormat getInstance() 利用了工场方式模式;
  • valueOf() 在包装类中,如Boolean, Integer 也利用了工场方式模式;
本文由亚博编辑整理亚博手机app