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

推荐订阅源

aimingoo的专栏
aimingoo的专栏
S
Secure Thoughts
MyScale Blog
MyScale Blog
H
Hackread – Cybersecurity News, Data Breaches, AI and More
WordPress大学
WordPress大学
大猫的无限游戏
大猫的无限游戏
S
SegmentFault 最新的问题
Google DeepMind News
Google DeepMind News
雷峰网
雷峰网
博客园 - 三生石上(FineUI控件)
博客园 - 聂微东
罗磊的独立博客
T
Threat Research - Cisco Blogs
Cyberwarzone
Cyberwarzone
V
Vulnerabilities – Threatpost
Microsoft Azure Blog
Microsoft Azure Blog
Cisco Talos Blog
Cisco Talos Blog
The Hacker News
The Hacker News
I
InfoQ
F
Full Disclosure
L
LangChain Blog
D
DataBreaches.Net
C
Cybersecurity and Infrastructure Security Agency CISA
T
Tenable Blog
Vercel News
Vercel News
S
Schneier on Security
博客园 - 叶小钗
L
Lohrmann on Cybersecurity
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
Know Your Adversary
Know Your Adversary
Scott Helme
Scott Helme
NISL@THU
NISL@THU
G
Google Developers Blog
T
Threatpost
AI
AI
P
Proofpoint News Feed
Google DeepMind News
Google DeepMind News
I
Intezer
IT之家
IT之家
Security Archives - TechRepublic
Security Archives - TechRepublic
Help Net Security
Help Net Security
K
Kaspersky official blog
H
Hacker News: Front Page
D
Docker
Project Zero
Project Zero
博客园 - 【当耐特】
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
The Register - Security
The Register - Security
PCI Perspectives
PCI Perspectives
Schneier on Security
Schneier on Security

博客园 - mshwu

桥接模式(Bridge Pattern) 单例模式 命名空间的规划 Download Manager Intent(二) Intent (一) Fragment (一) 2-1 Managing the Activity Lifecycle java1.5新特性(转) 1-4 Starting Another Activity 1-3 Building a Simple User Interface(创建简单的用户界面) 1-2 Android系统架构基本模式解析 1-1 Building Your First Android Application FTP Send File: Source Code Review(转) 动态操作文件 通用日志管理工具 触发器程序 通过CLP实现library之间的自动复制 (转) OVRDBF的用法
工厂方法模式
mshwu · 2013-09-26 · via 博客园 - mshwu

工厂方法模式

Posted on 2013-09-26 22:43  mshwu  阅读(309)  评论()    收藏  举报

1,定义

          所谓工厂方法模式(Factory Method Pattern),就是定义一个创建产品对象的工厂接口,让子类决定实例化哪一种实例对象,也就是将实际创建实例对象的工作推迟到子类当中,核心工厂类不再负责具体产品的创建。

2,优点

  • 简单工厂模式的进一步抽象,可以使系统在不修改具体工厂角色的情况下引进新的产品, 完全实现“开-闭”原则, 对扩展开发,对修改关闭
  • 依赖于抽象,而不是具体的实现类, 大大降低了客户程序与实现细节的耦合度
  • 可以使代码结构清晰,有效地封装变化。在编程中,产品类的实例化有时候是比较复杂和多变的,通过工厂模式,将产品的实例化封装起来,使得调用者根本无需关心产品的实例化过程,只需依赖工厂即可得到自己想要的产品。

3, 使用场合

  • 当子类可能会很多, 以后需要不断的增添子类实现时;
  • 当一个系统尚在框架设计阶段,还不知道将来需要实例化哪些具体类时;
  • 系统设计之初不需要具体对象的概念

    image

通过工厂方法模式的类图可以看到,工厂方法模式有四个要素:

  • 工厂接口:工厂接口是工厂方法模式的核心,与调用者直接交互用来提供产品。
  • 具体工厂:具体工厂决定如何实例化产品,是实现扩展的途径,需要有多少种产品,就需要有多少个具体的具体工厂。
  • 抽象产品:抽象产品的主要目的是定义产品的规范,所有的具体产品都必须遵循抽象产品所定义的规范。
  • 具体产品:抽象产品的具体实现,决定了产品在客户端中的具体行为。

抽象工厂生产抽象产品,具体工厂生产具体产品       

工厂接口

public  interface ICreateCar  {
    public AbstractCar createCar() ;

}

具体工厂

public  class FactoryKindCar  implements ICreateCar {
    @Override
    public AbstractCar createCar() {
        
        return new KindCar("KindCar","Red"); 
    }    
 }

抽象产品

public  abstract class AbstractCar  {
    protected String name;
    protected String color;

    public abstract void start();    

 }

具体产品

public  class KindCar extends AbstractCar  {

    public KindCar(String name,String color)
    {
        this.name = name;
        this.color = color;
    }
    @Override
    public void start() {
        
        System.out.println("The car "+this.name+" color with "+this.color+" is running!");
        
    }

 }

下面建立一个客产测试程序:

public class FactoryMethodTesting {

    public static void main(String[] str)
    {
        ICreateCar createcar = new FactoryKindCar();
        AbstractCar car = createcar.createCar();
        car.start();
    }
    
}

这里突出一个原则,永远面向抽象及接口编程,而不是具体实现, 假如有一种新的车要增加,我们只需添加一个具体产品与具体工厂, 丝毫不会影响原来的应用逻辑,支持“开-闭原则。

动行结果

image