设计模式之工厂方法模式
时间:2022-07-23
本文章向大家介绍设计模式之工厂方法模式,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
设计模式之工厂方法模式
结构
说明
Define an interface for creating an object, but let subclasses decide which class to instantiate. Factory Method lets a class defer instantiation to subclasses .
定义一个接口用于创建对象,但是让子类决定初始化哪个类。工厂方法把一个类的初始化下放到子类。
适用条件
当一个类不知道它所必须创建对象的类或一个类希望由子类指定它所创建的对象时, 可以采用工厂方法。
实现
abstract class MazeGame {
private readonly IList<Room> _rooms = new List<Room>();
protected MazeGame() {
var room1 = this.MakeRoom();
var room2 = this.MakeRoom();
room1.Connect(room2);
this.AddRoom(room1);
this.AddRoom(room2);
}
private void AddRoom(Room room) {
this._rooms.Add(room);
}
protected abstract Room MakeRoom();
}
class MagicMazeGame : MazeGame {
protected override Room MakeRoom() {
return new MagicRoom();
}
}
class Room {
private Room _next;
public void Connect(Room other) {
this._next = other;
}
}
class MagicRoom : Room {
}
class Program {
static void Main(string[] args) {
MazeGame game = new MagicMazeGame();
Console.ReadKey();
}
}
.Net Framework 之中, Ado.Net 的 IDbConnection 的 CreateCommand 方法, 可以说是典型的 工厂方法模式。
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- pytorch读取一张图像进行分类预测需要注意的问题(opencv、PIL)
- 【LeetCode】旋转数组的最小数字day08
- 【原创】Spring Boot集成Redis的玩法
- 当前页面是否可见
- 【LeetCode】两数之和day09
- 【原创】SpringBoot快速整合Thymeleaf模板引擎
- 【leetCode】打印从1到最大的n位数day10
- 你真的了解Java中的String吗(也太菜了)?
- 【设计模式】变化和不变化的代码进行分离day01
- isObject
- 【leetCode】股票的最大利润day12
- Spring Boot 集成 Druid 监控数据源
- 文本分类实战(八)—— Transformer模型
- 滚动页面
- 安全整数