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

推荐订阅源

酷 壳 – CoolShell
酷 壳 – CoolShell
T
Threatpost
Latest news
Latest news
N
News | PayPal Newsroom
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
Help Net Security
Help Net Security
D
Darknet – Hacking Tools, Hacker News & Cyber Security
AI
AI
Simon Willison's Weblog
Simon Willison's Weblog
TaoSecurity Blog
TaoSecurity Blog
The Last Watchdog
The Last Watchdog
L
LINUX DO - 热门话题
Google DeepMind News
Google DeepMind News
T
Threat Research - Cisco Blogs
O
OpenAI News
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
T
The Exploit Database - CXSecurity.com
NISL@THU
NISL@THU
Application and Cybersecurity Blog
Application and Cybersecurity Blog
S
Securelist
小众软件
小众软件
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
Martin Fowler
Martin Fowler
S
SegmentFault 最新的问题
Cisco Talos Blog
Cisco Talos Blog
云风的 BLOG
云风的 BLOG
AWS News Blog
AWS News Blog
GbyAI
GbyAI
N
News and Events Feed by Topic
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
美团技术团队
Engineering at Meta
Engineering at Meta
A
About on SuperTechFans
博客园 - 三生石上(FineUI控件)
S
Schneier on Security
博客园 - 聂微东
V2EX - 技术
V2EX - 技术
T
Troy Hunt's Blog
SecWiki News
SecWiki News
S
Secure Thoughts
B
Blog RSS Feed
Hugging Face - Blog
Hugging Face - Blog
WordPress大学
WordPress大学
腾讯CDC
H
Heimdal Security Blog
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
Apple Machine Learning Research
Apple Machine Learning Research
月光博客
月光博客
www.infosecurity-magazine.com
www.infosecurity-magazine.com
P
Privacy International News Feed

博客园 - 杨连国

win10 IoT开发 Serial​Device 返回 null .NET Delegates: A C# Bedtime Story【转载】 C++ 和 C# 变量定义的一点区别 变量定义 接口(CLR via C# 读书笔记) 生成器模式(builder) 类型和成员基础(CLR via C#) 基本类型、引用类型、值类型——(CLR via C#) 李建忠C#面向对象设计模式纵横谈 —— 单件模式 李建忠C#面向对象设计模式纵横谈 —— 面向对象设计模式与原则 程序设计和重构的目标 OO设计原则——读《你必须知道的.NET》 输入法灰掉bug解决 半角全角Bug解决 由迭代模式想到得——用设计模式理解 .NET ASCII 表设计之妙 调用VC封装的DLL时,两个类型匹配问题 调用非托管Dll Invoke 和 BeginInvoke 的区别
抽象工厂模式(abstract factory)
杨连国 · 2008-06-26 · via 博客园 - 杨连国

之前对抽象工厂模式理解不透彻,困惑,看了李建忠的讲解,收获如下:

        1、单纯从GoF的定义,并不能理解其用意;
   
        2、要从动机去理解,这里有两点:

        一系列相互依赖的对象的创建
        由于需求的变化,存在更多系列对象的创建。

    ------------------------------------------------------------

    李建忠总结要点如下:

    1、如果没有应对“多系列对象构建”的需求变化,则没有必要用抽象工厂模式,这时候使用简单工厂完全可以了。

    2、系列对象指的是这些对象之间有相互依赖或作用的关系。

    3、abstract factory的缺点是难以应对“新对象”的创建,也就是在这一系列的对象确定下来之后,最好就不变了,只是增加不同系列的这些对象,这是其优势所在,如果增减了对象,对该模式反而是灾难。

    ------------------------------------------------------------

    另外个人觉得其引入思路比较好:

    首先是,没有变化,不需要额外封装;
    如果有了变化,哪里有变化,就封装哪里;
    这里抽象工厂模式应对的是对象创建有变化,那就封装对象创建。
    为了实现不依赖于new,出现了工厂,让工厂统一创建对象;
    为了实现对象实例不依赖于具体对象类,出现了抽象对象类,所有具体的对象类都继承于该抽象类。
    同理,为了产生不同系列的对象,需要不同的工厂,那么就可以抽象一个抽象工厂,让所有具体工厂继承于抽象工长,如此一来,客户程序就只依赖于抽象类,并能应对变化了。
    变化不会消失,只会转移,变化到哪去了呢?对抽象工厂的赋值,这里是逃不掉的。

    ------------------------------------------------------------

    最后还是引出GoF的定义:

    提供一个接口,让该接口负责创建一系列“相关或则相互依赖的对象”,而无需指定它们具体的类。
                        ——《设计模式》GoF

    以及其UML图
   
抽象工厂模式