工厂模式
时间:2022-04-26
本文章向大家介绍工厂模式,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
工厂模式
何为工厂模式:定义一个用于创建对象的接口,让子类去决定实例化那一个类,FactoryMethod可以使一个类的实例化延迟到其子类。
工厂模式分类
工厂模式按其形态分主要分为三类:简单工厂、工厂模式和抽象工厂模式。
简单工厂模式
简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。顾名思义工厂就是生产东西的,有原料(参数),模子(对象)就能生产出很多个具有相同功能的对象啦。
uml图
代码实现
public class Program
{
static void Main(string[] args)
{
LeiFeng studentA = SimpleFactory.CreateLeiFeng("学雷锋的大学生");//用简单工厂创建并实例化学雷锋的大学生
studentA.BuyRice();
LeiFeng studentB = SimpleFactory.CreateLeiFeng("社区志愿者");//用简单工厂创建实例化社区志愿者
studentB.BuyRice();
}
}
//雷锋类,定义了一些功能
class LeiFeng
{
public void Sweep(){ } //擦桌子
public void Wash(){ } //洗衣服
public void BuyRice(){ } //买米
}
//简单工厂类
class SimpleFactory
{
public static LeiFeng CreateLeiFeng(string type)
{
LeiFeng result = null;
switch (type) //判断选择要创建对象的类型
{
case "学雷锋的大学生":
result = new UnderGraduate();
break;
case "社区志愿者":
result = new UnderGraduate();
break;
}
return result;
}
}
工厂模式:创建对象的接口,让子类去决定具体实例化的对象
public class Program {
static void Main(String[] args)
{
IFactory factory = new UndergraduateFactory(); //由接口创建新的学雷锋大学生
LeiFeng student = factory.CreateLeifeng(); //实例化
student.BuyRice();
student.Sweep();
student.Wash();
}
}
//雷锋类,定义了一些功能
class LeiFeng
{
public void Sweep(){ } //擦桌子
public void Wash(){ } //洗衣服
public void BuyRice(){ } //买米
}
//学雷锋的大学生
class UnderGraduate : LeiFeng{ }
//社区志愿者
class Volunteer : LeiFeng{ }
//雷锋工厂
interface IFactory //定义一个接口,实现创建雷锋类的功能
{
LeiFeng CreateLeifeng();
}
class UndergraduateFactory : IFactory//学雷锋大学生工厂
{
public LeiFeng CreateLeiFeng()
{
return new UnderGraduate();
}
}
class VolunteerFactory : IFactory//社区志愿者工厂
{
public LeiFeng CreateLeiFeng()
{
return new Volunteer();
}
}
注:文中的:表示extends
- 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 数组属性和方法
- spring之整合Hibernate
- 【pytorch】改造resnet为全卷积神经网络以适应不同大小的输入
- springmvc之数据的格式化
- 【python-leetcode207-拓扑排序】课程表
- 定时任务最简单的3种实现方法(Java)
- 回顾通用链表(亲测代码示例)
- 【python-leetcode210-拓扑排序】课程表Ⅱ
- Java实现最小生成树算法之Kruskal算法
- 来我们再聊聊 KMP 算法 -- 我懂,你也得懂
- 【pytorch】简单的线性回归
- 简单的并查集的实现
- 【python-leetcode269-拓扑排序】火星字典
- 通俗点聊聊算法 - 排序(3)快速排序,亲测
- springmvc之如何对表单数据进行校验
- 基于TypeScript封装Axios笔记(七)