Loading... ## 定义 在抽象工厂中声明了工厂方法,具体产品对象的创建由其子类(具体工厂)负责,客户端针对抽象工厂编程,可在运行时再指定具体工厂类。工厂方法模式让一个类的实例化延迟到其子类。工厂方法模式是一种类创建型模式。 ---------- ## UML图例 ![工厂方法模式](https://s1.ax1x.com/2020/05/21/YHswee.png) ---------- ## 代码示例 ```java // 日志记录器接口:抽象产品 public interface Logger { public void writeLog(); } // 数据库日志记录器:具体产品1 public class DatabaseLogger implements Logger{ public void writeLog() { System.out.println("数据库日志记录。"); } } // 文件日志记录器:具体产品2 public class FileLogger implements Logger { @Override public void writeLog() { System.out.println("文件日志记录"); } } // 日志记录器工厂接口:抽象工厂 interface LoggerFactory { public Logger createLogger(); } // 数据库日志记录器工厂类:具体工厂1 public class DatabaseLoggerFactory implements LoggerFactory{ @Override public Logger createLogger() { // 连接数据库,代码省略 // 创建数据库日志记录器对象 Logger logger = new DatabaseLogger(); // 初始化数据库日志记录器,代码省略 return logger; } } // 文件日志记录器工厂类:具体工厂2 public class FileLoggerFactory implements LoggerFactory { public Logger createLogger() { // 创建文件日志记录器对象 Logger logger = new FileLogger(); // 创建文件,代码省略 return logger; } } public class Client { public static void main(String[] args) { LoggerFactory factory; Logger logger; factory = new FileLoggerFactory(); logger = factory.createLogger(); logger.writeLog(); } } ``` 与简单工厂模式相比,工厂方法模式最重要的区别是引入了抽象工厂角色,抽象工厂角色可以是接口,也可以是抽象类或者具体类(少见)。 快速入口: <div class="preview"> <div class="post-inser post box-shadow-wrap-normal"> <a href="https://www.fangshirui.cn/index.php/archives/380/" target="_blank" class="post_inser_a no-external-link"> <div class="inner-image bg" style="background-image: url(https://s1.ax1x.com/2020/05/21/YHDekn.png);background-size: cover;"></div> <div class="inner-content" > <p class="inser-title">设计模式-[简单工厂模式]</p> <div class="inster-summary text-muted"> 定义定义一个工厂类,它可以根据参数的不同返回不同类的实例,被创建的实例通常具有共同的父类。因为在简单工厂模式中用于... </div> </div> </a> <!-- .inner-content #####--> </div> <!-- .post-inser ####--> </div> 最后修改:2020 年 05 月 21 日 10 : 43 AM © 允许规范转载