runxinzhi.com
首页
百度搜索
工厂方法模式
1。概述 工厂方法是一个粒度很小的设计模式,因为模式的表现只是一个抽象的方法。工厂方法主要创建与某个类相关的类的实例。 2。意图 定义一个用于创建对象的接口(这里是一个抽象的方法),让包含这个接口的类的子类决定到底实例化哪一个类。工厂方法使一个类的实例化延迟到了子类。 3。使用场合 当一个类不知道它具体要创建对象的类或者一个类希望由子类指定它所创建的对象时,可是使用工厂方法模式。 4。效果 工厂方法使类中的代码不依赖它必须创建的类,代码只要知道它需要创建的类的接口。工厂方法的缺点是新增加一个需要创建的类,就需要增加一个相应的子类。 5。程序实例 我们先看一个小的例子,这个例子主要是获得不同类的实例的迭代器。程序如下: using System; using System.Collections; namespace FactoryMethod2 { ///
/// Class1 的摘要说明。 ///
class Class1 { ///
/// 应用程序的主入口点。 ///
[STAThread] static void Main(string[] args) { // // TODO: 在此处添加代码以启动应用程序 // ArrayList ar=new ArrayList(); IEnumerator e=ar.GetEnumerator(); System.Console.WriteLine(ar.GetType().Name+"的迭代器类型"+e.GetType().Name); String s=""; IEnumerator se=s.GetEnumerator(); System.Console.WriteLine(s.GetType().Name+"的迭代器类型"+se.GetType().Name); System.Console.ReadLine(); } } } 运行的结果如图: 6。工厂方法的结构 结构如图: 7。一个更加形象的例子---鸟生蛋 该例子的类图如下: 下面是程序的源代码: 鸟的类,它包含一个Produce()的抽象方法 using System; namespace FactoryMethod { ///
/// Bird 的摘要说明。 ///
public abstract class Bird { #region 属性 protected string name; #endregion #region 方法 public Bird() { // // TODO: 在此处添加构造函数逻辑 // } public Bird(string name) { this.name=name; } public string Name { get { return this.name; } } public abstract Egg Produce(); #endregion } } 鸡的类,它从鸟类继承下来 using System; namespace FactoryMethod { ///
/// Class2 的摘要说明。 ///
public class Chicken:Bird { public Chicken() { // // TODO: 在此处添加构造函数逻辑 // this.name="鸡"; } public override Egg Produce() { return new ChickenEgg(); } } } 鸭子的类,从鸟类中继承 using System; namespace FactoryMethod { ///
/// Duck 的摘要说明。 ///
public class Duck:Bird { public Duck() { // // TODO: 在此处添加构造函数逻辑 // this.name="鸭"; } public override Egg Produce() { return new DuckEgg(); } } } 蛋类,它是一个抽象的类 using System; namespace FactoryMethod { ///
/// Egg 的摘要说明。 ///
public class Egg { #region 属性 protected string name; #endregion #region 方法 public Egg() { // // TODO: 在此处添加构造函数逻辑 // } public Egg(string name) { this.name=name; } public string Name { get { return this.name; } } #endregion } } 鸡蛋的类(从蛋类继承) using System; namespace FactoryMethod { ///
/// ChickenEgg 的摘要说明。 ///
public class ChickenEgg:Egg { public ChickenEgg() { // // TODO: 在此处添加构造函数逻辑 // this.name="鸡蛋"; } } } 鸭蛋的类(从蛋类继承) using System; namespace FactoryMethod { ///
/// DuckEgg 的摘要说明。 ///
public class DuckEgg:Egg { public DuckEgg() { // // TODO: 在此处添加构造函数逻辑 // this.name="鸭蛋"; } } } 客户端程序 using System; namespace FactoryMethod { ///
/// Class1 的摘要说明。 ///
class Class1 { ///
/// 应用程序的主入口点。 ///
[STAThread] static void Main(string[] args) { // // TODO: 在此处添加代码以启动应用程序 // Chicken chicken=new Chicken(); System.Console.WriteLine(chicken.Name+" 生 "+chicken.Produce().Name); Duck duck=new Duck(); System.Console.WriteLine(duck.Name+" 生 "+duck.Produce().Name); System.Console.ReadLine(); } } } 程序运行的结果如下: 本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/niuyongjie/archive/2007/01/25/1493243.aspx
作者:
Leo_wl
出处:
http://www.cnblogs.com/Leo_wl/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
版权信息
相关阅读:
Go语言http之请求接收和处理 代码
C++之IO流的状态以及使用
C++之指向函数的指针
C++之数组类型的形参
C++之vector类型的形参
C++之形参
C++之运算符
C++之多维数组
C++之动态数组
C++之指针
原文地址:https://www.cnblogs.com/Leo_wl/p/1783361.html
最新文章
制作图集.放大缩小效果
Jmeter 之 Transaction Controller
Jmeter 中的 逻辑控制器 (logic Controller)
Jmeter的属性和变量
Jmeter注意要点
Jmeter组件执行顺序
centos8 安装 YcM
数据库的隔离级别
spring源码解析(3)
windows GQ怎么办,来这看看
热门文章
数据库范式
数据结构(一)
Slf4j+log4j2的使用
软考知识点整合
spring源码解析(二)
springboot 整合 log4j2 日志框架
C语言|博客作业03
C语言|博客作业02
游翠屏山公园游记 下段
游翠屏山公园游记 上段
Copyright © 2020-2023
润新知