工厂方法模式

工厂方法模式

Factory Method

模式定义:

定义一个用于创建对象的接口,让子类决定实例化哪一个类。Factory

Method 使得一个类的实例化延迟到子类

简单工厂:

java 复制代码
class SimpleFactory {
public static Product createProdcut(String type) {
if (type.equals( "0" )) {
return new ProductA();
} else if (type.equals( "1" )) {
return new ProductA1();
} else {
return null;
}
 }
}

工厂方法:

java 复制代码
// 稳定接口
interface Product {
 public void method1();
}
// 具体实现
class ProductA implements Product {

 public void method1() {
 System.out.println( "ProductA.method1 executed. " );
  }
 }

 class ProductA1 implements Product {

  public void method1() {
  System.out.println( "ProductA1.method1 executed. " );
  }
 }



 abstract class Application {

  abstract Product createProduct();

  Product getObject() {
  Product product=createProduct();
  // ...
  // ...
  return product;
  }

 }
 // 工厂方法具体实现类
 class ConcreteProductA extends Application {
  @Override
  Product createProduct() {
  // ....
  return new ProductA();
  }
 }

 class ConcreteProductA1 extends Application {
  @Override
  Product createProduct() {
  //...
  return new ProductA1();
  }
 }

应用场景

1.当你不知道改使用对象的确切类型的时候

2.当你希望为库或框架提供扩展其内部组件的方法时

主要优点:

1.将具体产品和创建者解耦

2.符合单一职责原则

3.符合开闭原则

源码中的应用:

java 复制代码
// java api
// 静态工厂方法

Calendar.getInstance()
java.text.NumberFormat.getInstance()
java.util.ResourceBundle.getBundle()

// 工厂方法
 java.net.URLStreamHandlerFactory
 javax.xml.bind.JAXBContext.createMarshaller
相关推荐
上单带刀不带妹17 分钟前
手写 Vue 中虚拟 DOM 到真实 DOM 的完整过程
开发语言·前端·javascript·vue.js·前端框架
-凌凌漆-1 小时前
【Qt】QStringLiteral 介绍
开发语言·qt
程序员爱钓鱼1 小时前
Go语言项目工程化 — 常见开发工具与 CI/CD 支持
开发语言·后端·golang·gin
军训猫猫头2 小时前
1.如何对多个控件进行高效的绑定 C#例子 WPF例子
开发语言·算法·c#·.net
真的想上岸啊2 小时前
学习C++、QT---18(C++ 记事本项目的stylesheet)
开发语言·c++·学习
明天好,会的2 小时前
跨平台ZeroMQ:在Rust中使用zmq库的完整指南
开发语言·后端·rust
丁劲犇3 小时前
用 Turbo Vision 2 为 Qt 6 控制台应用创建 TUI 字符 MainFrame
开发语言·c++·qt·tui·字符界面·curse
旷世奇才李先生3 小时前
Next.js 安装使用教程
开发语言·javascript·ecmascript
charlie1145141913 小时前
深入理解Qt的SetWindowsFlags函数
开发语言·c++·qt·原理分析
likeGhee4 小时前
python缓存装饰器实现方案
开发语言·python·缓存