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/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
版权信息
相关阅读:
TypesScript+Webpack
TypeScript 类型
git操作
kafka
java: cannot find symbol symbol: variable log
Angular结构型指令,模块和样式
Angular 自定义拖拽指令
Angular changeDetction
Angular 依赖注入
RXJS Observable的冷,热和Subject
原文地址:https://www.cnblogs.com/Leo_wl/p/1783361.html
最新文章
图解 Git
Executors提供的四种线程池
导入的eclipse 中 maven项目,项目中已经加入lombok.jar包,但是不能编译成功
【重要】将项目发布到Maven中央库
gpg使用说明
如何发布Jar包到Maven中央仓库
linux:gpg加密和解密
eclipse中使用maven插件的时候,运行run as maven build的时候报错 -Dmaven.multiModuleProjectDirectory system propery is not set. Check $M2_HOME environment variable and mvn script match.
将 Smart 构件发布到 Maven 中央仓库
表单元素——checkbox样式美化
热门文章
css多栏自适应布局
深入理解position属性&containing block
深入理解css浮动
css3 text-overflow和white-space,word-wrap,word-break进阶
background-attachment属性进阶
不透明度opacity进阶
深入理解css优先级
TypeScript类型检查机制
TypeScript类
TypeScript接口
Copyright © 2020-2023
润新知