设计模式之抽象工厂模式
时间:2022-07-22
本文章向大家介绍设计模式之抽象工厂模式,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
设计模式之抽象工厂模式
结构
说明
Provide an interface for creating families of related or dependent objects without specifying their concrete classes.
为一个产品族提供了统一的创建接口。当需要这个产品族的某一系列的时候,可以从抽象工厂中选出相应的系列创建一个具体的工厂类。
适用条件
- 一个系统要独立于其产品的创建、组合和表示时;
- 一个系统需要由多个产品系列中的一个来配置时;
- 需要提供一个产品类库, 而只想显示他们的接口, 而隐藏他们的实现时。
实现
public interface IButton {
void Paint();
}
public interface IGuiFactory {
IButton CreateButton();
}
public class OsxButton : IButton {
public void Paint() {
Console.WriteLine("I'm an OSXButton");
}
}
public class WinButton : IButton {
public void Paint() {
Console.WriteLine("I'm a WinButton");
}
}
public class OsxFactory : IGuiFactory {
IButton IGuiFactory.CreateButton() {
return new OsxButton();
}
}
public class WinFactory : IGuiFactory {
IButton IGuiFactory.CreateButton() {
return new WinButton();
}
}
public class Application {
public Application(IGuiFactory factory) {
var button = factory.CreateButton();
button.Paint();
}
}
public class ApplicationRunner {
static IGuiFactory CreateOsSpecificFactory() {
var sysType = ConfigurationManager.AppSettings["OS_TYPE"] ?? "Win";
if (sysType == "Win") {
return new WinFactory();
}
return new OsxFactory();
}
static void Main(string[] args) {
new Application(CreateOsSpecificFactory());
Console.ReadKey();
}
}
- 关于执行计划中的%CPU的含义 (r7笔记第25天)
- Java设计模式-享元模式
- 简单易学的机器学习算法——线性可分支持向量机
- 基于gensim的Doc2Vec简析,以及用python 实现简要代码
- 关于db link权限分配的苦旅(一) (r7笔记第42天)
- Java设计模式-责任链模式
- Java设计模式-策略模式
- CPU 100%负载的性能优化分析(r7笔记第40天)
- Sklearn-train_test_split随机划分训练集和测试集
- 使用shell来定制dbms_sqltune(r7笔记第39天)
- 简单易学的机器学习算法——分类回归树CART
- Java设计模式-状态模式
- DBA和开发同事的一些代沟(四) (r7笔记第36天)
- python获取文件所在目录和文件名,以及检索当前文件名的方法
- 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 数组属性和方法