java设计模式--工厂方法模式
Posted rhodesis
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java设计模式--工厂方法模式相关的知识,希望对你有一定的参考价值。
工厂方法模式
工厂方法模式也属于对象创建型模式,工厂方法模式主要是用于定义一个创建对象的接口,让子类决定实例化哪一个类。工厂方法模式主要作用是将一个类的实例化过程放到它的子类中。
工厂方法模式的适用性
工厂方法模式主要适用于以下情况:
-
当一个类不知道它所必须要创建对象的类型是哪种的时候。
-
当一个类希望由它的子类来指定创建的对象的时候。
-
当一个类想将创建对象的指责委托给众多子类,并且希望一个明确的子类是其代理者的时候。
工厂方法模式结构图
工厂方法模式主要包含以下四个角色:
-
抽象工厂角色:抽象工厂角色主要包含两个方法,FactoryMethod(工厂方法)通常实在工厂方法模式中提供创建对象接口的方法,AnOperation方法是一个模板方法,该方法是通过调用工厂方法来提供创建对象的接口。
-
具体工厂角色:该角色主要是通过继承抽象工厂角色然后通过重写工厂方法以返回一个ConcreteProduct实例。
-
抽象产品角色:工厂方法所创建对象的超类,所有工厂方法的具体产品角色类的共同超类。
-
具体产品角色:通过重写工厂方法以返回一个具体产品角色类的实例。
在这些角色中,比较重要的是工厂方法,工厂方法主要有两种不同的模式:1)Creator类是一个抽象类,提供的工厂方法为一个抽象方法,不提供工厂方法的具体实现,这样要实现工厂方法必须要通过ConcreteCreator重写工厂方法来实现对象的创建。2)Creator类也可以提供一个已经实现的具体工厂方法,若新增了新的产品可以通过创建新的ConcreteCreator类来实现新产品的对象的创建。
工厂方法模式的具体实现:
我们平时用Microsoft Word文档的时候写完之后,可以保存为PDF和Word格式的文件,我们可以通过一个工厂方法模式实现它。下面这种实现方法只代表了一类抽象工厂方法的实现
public interface SaveFactory { public SaveFile factory(); }
具体工厂角色:
public class SavePdfFactory implements SaveFactory { @Override public SaveFile factory() { return new PdfFile(); } } public class SaveWordFile implements SaveFactory { @Override public SaveFile factory() { return new WordFile(); } }
抽象产品角色:
public interface SaveFile { public boolean saveFile(String data); }
具体产品角色:
public class PdfFile implements SaveFile { @Override public boolean saveFile(String data) { System.out.println("保存为PDF文件"); return true; } } public class WordFile implements SaveFile { @Override public boolean saveFile(String data) { System.out.println("保存为WORD文件"); return true; } }
客户端代码:
public class Client { public static void main(String[] args) { String data = ""; SaveFactory saveFactory = new SavePdfFactory(); SaveFile saveFile = saveFactory.factory(); saveFile.saveFile(data); } }
总结
工厂方法模式降低了代码的耦合性,将产品对象的创建过程交给子类,当有新的产品类型产生的时候可以通过继承抽象工厂角色来创建新的产品对象,这样可以通过继承的方式来满足开发中多样的产品需求。
以上是关于java设计模式--工厂方法模式的主要内容,如果未能解决你的问题,请参考以下文章
java设计模式:工厂方法模式(Factory Method)