博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
抽象工厂模块在开发中的应用
阅读量:5865 次
发布时间:2019-06-19

本文共 2631 字,大约阅读时间需要 8 分钟。

抽象工厂是设计模块中创建型模式的一种,它比起工厂方法模式来说,更加具有一般性,在本模式中会引入一个产品族的概念,就是说,在本模式中抽象产品会有多个,然后用抽象工厂去调用它们,具体怎么去调用由具体工厂来实现。

看下列代码,主要实现动态生成按钮和弹出窗口的功能,弹出窗口可以根据浏览器的类型去调用适合

自己的方法,按钮也可以根据传入的样式和类型去自动生成按钮。

class Program
{
static void Main(string[] args)
{
RunEnvironment run=new RunEnvironment (new RedFactory());
Console.WriteLine(run.Button.ToHtml(ButtonType.Button,"name1"));
}
}
#region WindowOpen的抽象产品和具体产品
public abstract class WindowOpen
{
protected WindowOpen(string title)
{
Title = title;
}
protected string Title { get; set; }
public abstract string ToHtml(string url);
}
public class IeWindowOpen : WindowOpen
{
public IeWindowOpen()
: base("IE")
{
 
}
public override string ToHtml(string url)
{
return string.Format("
}
}
public class FireFoxWindowOpen : WindowOpen
{
public FireFoxWindowOpen()
: base("火狐")
{
 
}
public override string ToHtml(string url)
{
return string.Format("
 
}
}
#endregion
 
#region Button的抽象产品和具体产品
/// 
/// 按钮类型
/// 
public enum ButtonType
{
Submit,
Button,
Reset,
}
public abstract class Button
{
protected Button(string className)
{
ClassName = className;
}
protected string ClassName { get; set; }
public abstract string ToHtml(ButtonType buttonType, string id);
}
public class RedButton : Button
{
public RedButton()
: base("Redbtn")
{
 
}
public override string ToHtml(ButtonType buttonType, string id)
{
return string.Format("",
Enum.GetName(typeof(ButtonType), buttonType), ClassName, id);
}
}
 
public class GreenButton : Button
{
public GreenButton()
: base("GreenBtn")
{
 
}
public override string ToHtml(ButtonType buttonType, string id)
{
 

return string.Format("<input id='{2}' name='{2}' type='{0}' class='{1}' />",

Enum.GetName(typeof(ButtonType), buttonType), ClassName, id);

}
}
#endregion
 
#region 抽象工厂和具体工厂
public abstract class Factory
{
public abstract WindowOpen CreateWindowOpen();
public abstract Button CreateButton();
}
public class GreenFactory : Factory
{
public override Button CreateButton()
{
return new GreenButton();
}
public override WindowOpen CreateWindowOpen()
{
return new IeWindowOpen();
}
}
 
public class RedFactory : Factory
{
public override Button CreateButton()
{
return new RedButton();
}
public override WindowOpen CreateWindowOpen()
{
return new IeWindowOpen();
}
}
 
#endregion
 
#region 应用环境
public class RunEnvironment
{
public WindowOpen WindowOpen { get; set; }
public Button Button { get; set; }
public RunEnvironment(Factory factory)
{
this.WindowOpen =  factory.CreateWindowOpen();
this.Button = factory.CreateButton();
}
 
}
#endregion

看到上面代码后,如果我们想为按钮加一个黄色的样式,我要示从Button类派生一个子类,去实现

黄色样式功能就可以了,而不需要修改已有的代码,这也很好的符合的“开闭原则(OCP)”

本文转自博客园张占岭(仓储大叔)的博客,原文链接:,如需转载请自行联系原博主。

你可能感兴趣的文章
《Web测试囧事》——2.2 页面字段依赖导致表单提交时出错
查看>>
中国IPv6用户仅千分之三,落后于印度和越南
查看>>
Qt之图形(渐变填充)
查看>>
深度操作系统 15 Alpha2 —— 带你领略不一样的深度
查看>>
为神马说写程序是很艰难的
查看>>
《DNS与BIND(第5版)》——4.9 增加更多区域
查看>>
谁是抛弃 WinXP 速度最快的国家?
查看>>
jquery插件的编写
查看>>
AngularJS 1.3 提升了 HTML 表单
查看>>
《拥抱机器人时代——Servo杂志中文精华合集》——导读
查看>>
Terraform 0.9.8 发布,基础架构管理工具
查看>>
《Exchange Server 2010 SP1/SP2管理实践》一1.3 本书中域控制器的概念
查看>>
1、solr包结构介绍,solrCore的安装配置,solr部署到Tomcat,多solrCore配置,配置中文分词器,界面功能介绍,Schema.xml的基本使用,数据导入...
查看>>
CentOS7更改时区
查看>>
2013 年开源中国 10 大热门 Java 开源项目
查看>>
《威胁建模:设计和交付更安全的软件》——2.5 小结
查看>>
MySQL 集群服务简介
查看>>
《Ember.js实战》——1.5 小结
查看>>
Aliware 云产品领航 2017—— 企业级互联网架构 Aliware 全新升级
查看>>
《移动App测试的22条军规》——第5章,第5.3节规范与习惯
查看>>