惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

I
Intezer
宝玉的分享
宝玉的分享
V
Visual Studio Blog
The Cloudflare Blog
云风的 BLOG
云风的 BLOG
Engineering at Meta
Engineering at Meta
Stack Overflow Blog
Stack Overflow Blog
Vercel News
Vercel News
P
Proofpoint News Feed
阮一峰的网络日志
阮一峰的网络日志
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
V
V2EX
博客园 - Franky
J
Java Code Geeks
月光博客
月光博客
博客园 - 三生石上(FineUI控件)
D
Docker
IT之家
IT之家
小众软件
小众软件
M
MIT News - Artificial intelligence
Spread Privacy
Spread Privacy
雷峰网
雷峰网
C
CERT Recently Published Vulnerability Notes
N
News | PayPal Newsroom
量子位
The Last Watchdog
The Last Watchdog
The Register - Security
The Register - Security
PCI Perspectives
PCI Perspectives
罗磊的独立博客
S
Secure Thoughts
WordPress大学
WordPress大学
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
B
Blog
T
Threatpost
The GitHub Blog
The GitHub Blog
博客园 - 叶小钗
U
Unit 42
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
H
Help Net Security
Cloudbric
Cloudbric
G
Google Developers Blog
C
Cyber Attacks, Cyber Crime and Cyber Security
人人都是产品经理
人人都是产品经理
H
Heimdal Security Blog
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
Last Week in AI
Last Week in AI
Jina AI
Jina AI
O
OpenAI News
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
美团技术团队

博客园 - 金鱼

2009年阅读的图书 SQL分页语句 const和readonly区别 jQuery使用说明 (转)Web页面中常用到的广告效果 接口和抽象类 在ASP.NET中重写URL 静态与非静态的区别 .net开发人员应该必备的十种工具(新/旧对比) (转)几种流行的JS框架的选择 ActionScript3系列课程(二)----流程控制和函数 ActionScript3系列课程(一)----基本元素 网联网之电子商务概念 技术解析:什么是模式? 什么是框架?[转] 三层架构图[转] JS调用后台带参数的方法 弹出对话框并发生页面跳转 vs2005 单元测试 面试中常问的.NET算法问题
设计模式之抽象工厂(一)
金鱼 · 2008-04-30 · via 博客园 - 金鱼

一。组成部分
1.抽象工厂----担任这个角色的是工厂方法模式的核心,它是与应用系统商业逻辑无关的。
2.具体工厂----这个角色直接在客户端的调用下创建产品的实例。这个角色含有选择合适的产品对象的逻辑,而这个逻辑是与应用系统的商业逻辑紧密相关的。
3.抽象产品----担任这个角色的类是工厂方法模式所创建的对象的父类,或它们共同拥有的接口。
4.具体产品----抽象工厂模式所创建的任何产品对象都是某一个具体产品类的实例。这是客户端最终需要的东西,其内部一定充满了应用系统的商业逻辑。
5.用户----用户通过抽象工厂和抽象产品选择自己所需要的具体产品
二。UML类图

三。代码

  1using System;
  2using System.Collections.Generic;
  3using System.Text;
  4
  5namespace Pattern
  6{
  7    public class AbstratcFactory
  8    {
  9        public static void Main(string[] args)
 10        {
 11            AbstractSql delete = new SqlServer();
 12            ClientUser user1 = new ClientUser(delete);
 13            user1.Show();
 14
 15            AbstractSql insert = new Oracle();
 16            ClientUser user2 = new ClientUser(insert);
 17            user2.Show();
 18        }

 19    }

 20    
 21    //抽象工厂类
 22    public abstract class AbstractSql
 23    
 24        public abstract AbstractInsert Insert();
 25        public abstract AbstractDelete Delete();
 26    }

 27
 28    //具体工厂[SqlServer]
 29    public class SqlServer:AbstractSql
 30    {
 31        public override AbstractInsert Insert()
 32        {
 33            return new SqlServerInsert();
 34        }

 35
 36        public override AbstractDelete Delete()
 37        {
 38            return new SqlServerDelete();
 39        }

 40    }

 41
 42    //具体工厂[Oracle]
 43    public class Oracle:AbstractSql
 44    {
 45        public override AbstractInsert Insert()
 46        {
 47            return new OracleInsert();
 48        }

 49
 50        public override AbstractDelete Delete()
 51        {
 52            return new OracleDelete();
 53        }

 54    }

 55
 56    //抽象产品[Insert]
 57    public abstract class AbstractInsert
 58    {   }
 59   
 60    //抽象产品[Delete]
 61    public abstract class AbstractDelete
 62    {
 63        public abstract void Interact(AbstractInsert insert);
 64    }

 65
 66    //具体产品1[SqlServerInsert]
 67    public class SqlServerInsert : AbstractInsert
 68    {  }
 69        
 70    //具体产品1[OracleInsert]
 71    public class OracleInsert : AbstractInsert
 72    { }
 73    
 74    //具体产品2[SqlServerDelete]
 75    public class SqlServerDelete : AbstractDelete
 76    {
 77        public override void Interact(AbstractInsert insert)
 78        {
 79            Console.WriteLine(this.GetType().Name + "  interacts with:  " + insert.GetType().Name);
 80        }

 81    }

 82    //具体产品2[OracleDelete]
 83    public class OracleDelete : AbstractDelete
 84    {
 85        public override void Interact(AbstractInsert insert)
 86        {
 87            Console.WriteLine(this.GetType().Name + "  interacts with:  " + insert.GetType().Name);
 88        }

 89    }

 90
 91    //用户
 92    public class ClientUser
 93    {
 94        private AbstractInsert AbstractInsert;
 95        private AbstractDelete AbstractDelete;
 96
 97        public ClientUser(AbstractSql sql)
 98        {
 99            AbstractInsert = sql.Insert();
100            AbstractDelete = sql.Delete();
101        }

102
103        public void Show()
104        {
105            AbstractDelete.Interact(AbstractInsert);
106        }

107    }

108}

109