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

推荐订阅源

宝玉的分享
宝玉的分享
NISL@THU
NISL@THU
E
Exploit-DB.com RSS Feed
L
LINUX DO - 热门话题
L
Lohrmann on Cybersecurity
K
Kaspersky official blog
Project Zero
Project Zero
Cisco Talos Blog
Cisco Talos Blog
T
The Exploit Database - CXSecurity.com
P
Palo Alto Networks Blog
C
CXSECURITY Database RSS Feed - CXSecurity.com
T
Threatpost
S
Schneier on Security
G
GRAHAM CLULEY
The Hacker News
The Hacker News
T
Threat Research - Cisco Blogs
Scott Helme
Scott Helme
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
P
Privacy & Cybersecurity Law Blog
C
Cyber Attacks, Cyber Crime and Cyber Security
Cyberwarzone
Cyberwarzone
C
CERT Recently Published Vulnerability Notes
T
Tor Project blog
AWS News Blog
AWS News Blog
Simon Willison's Weblog
Simon Willison's Weblog
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
爱范儿
爱范儿
P
Privacy International News Feed
云风的 BLOG
云风的 BLOG
P
Proofpoint News Feed
S
Securelist
G
Google Developers Blog
The Last Watchdog
The Last Watchdog
Google Online Security Blog
Google Online Security Blog
美团技术团队
F
Fortinet All Blogs
小众软件
小众软件
Recorded Future
Recorded Future
V
Visual Studio Blog
B
Blog RSS Feed
H
Help Net Security
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
Google DeepMind News
Google DeepMind News
Blog — PlanetScale
Blog — PlanetScale
博客园 - 聂微东
Stack Overflow Blog
Stack Overflow Blog
Martin Fowler
Martin Fowler
Latest news
Latest news
Spread Privacy
Spread Privacy
H
Heimdal Security Blog

博客园 - zyi

Windows FTP安装 组合模式 Oracle优化 Oracle的汉字转拼音首字母的函数 创建job 建索引 加解密 代码规范工具 耦合内聚封装 Dev进度条 SQL_SERVER 导oracle(转) SQL_SERVER 连接oracle(转) win7电脑上wifi Oracle对象统计信息 关于odp.net的FetchSize属性 技巧类 linq in 语法 静态与非静态(转改) 关于引擎的设计
温习设计模式
zyi · 2013-02-25 · via 博客园 - zyi

以前也看过一次设计模式,但是除了工厂方法和单例,其他都没怎么用。这才决定重温下,一天看一个设计模式。感觉UML的继承关系不重要,关键是什么情况下,应该用什么模式。至于继承关系忘记了,可以查书再看。

抽象工厂模式可以向客户端提供一个接口,使客户端在不必指定产品的具体的情况下,创建多个产品族中的产品对象。这里的例子是动物世界。非洲动物、美洲动物、亚洲动物

每个洲的动物又都有食肉动物、食草动物。但具体的食肉动物和食草动物是不一样的。这时候可以使用抽象工厂。new一个动物世界类,传入泛型的子类。然后调用动物世界类对应的子类,这时当情况发生变化后只要修改对应的泛型参数即可。或者本来就有对应的下拉选择。这里要注意的是抽象工厂是有对应的产品族的。一般情况下用工厂就可以了。

抽象工厂模式与生成器相似,因为它也可以创建复杂对象。主要的区别是生成器模式着重于一步步构造一个复杂对象。而抽象工厂模式着重于多个系列的产品对象(简单的或是复杂的)。生成器在最后的一步返回产品,而对于抽象工厂来说,产品是立即返回的。这里可以举这样一个例子,不同的人都由头、身体、手、脚组成。但每个人的原地摸高都是不同的。而原地摸高其实在构造每个人的个体时已经产生了。这时我们可以用生成器模式。

工厂方法的话就是没有产品族了,就比如现在有同样的insert和delete方法,但一个是Oracle一个是sql的,这时可以用工厂方法实现。这也就能解释为什么实际中工作中基本都是工厂方法,很少用到抽象工厂和生成器了。

原型模式就是克隆,C#本身已经实现了,不用考虑。

单例就是如果实例没有则创建,否则直接返回。始终保证实例只有一个。