博客
关于我
1. 简单工厂模式
阅读量:637 次
发布时间:2019-03-14

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

 

简单工厂模式让用户在使用对象时无需关心对象的创建细节,从而降低系统的耦合度,让设计方案更易于修改和扩展。

 

1.先用人话讲一下什么是简单工厂模式

顾客只需要知道香蕉这个名字(仅仅是名字,不是真正的香蕉),水果农场(Factory)就能给出香蕉这个水果实体(能吃到嘴的香蕉,Product)。

 

简单工厂的定义:定义一个工厂类,它可以根据参数的不同返回不同类的实例,被创建的实例通常都具有相同的父类

由于创建实例的方法通常都是静态的,因此简单工厂模式又被成为静态工厂方法模式,它是一种类创建型模式。

简单工厂模式的要点在于,当用户需要什么,只需要传入一个参数就可以得到对应的对象,不需要知道其中创建的细节。

 

2.简单工厂模式结构

1)简单工厂模式核心是工厂类的设计,包含三个角色。

==1)Factory(工厂角色):

        ^1. 主要负责创建所有产品实例的内部逻辑

        ^2. 可以被外界直接调用,创建所需的产品对象

        ^3. 提供静态的工厂方法factoryMethod(),返回类型为抽象产品类型Product

 

==2)抽象产品角色:

        ^1. 它是工厂类创建的所有对象的父类,封装了不同产品的共有方法

 

==3)具体产品角色:

        ^1. 它是最终的创建目标,每个具体产品角色都继承了抽象产品角色,需要实现在抽象产品中声明的抽象方法

 

 

 

3.简单工厂模式的实现

1)抽象产品类

package controller.simpleFactoryModule;/** *抽象产品 */public abstract class Product {    //所有产品类的公共业务方法    public void methodSame(){        //公共方法的实现    }    //声明抽象业务方法    public abstract void methodDiff();}

2)具体产品类A 

package controller.simpleFactoryModule;public class ConcreteProductA extends Product {    /**     * 实现业务方法     */    @Override    public void methodDiff() {        //业务方法的实现    }}

3)具体产品类B

package controller.simpleFactoryModule;public class ConcreteProductB extends Product {    /**     * 实现业务方法     */    @Override    public void methodDiff() {        //业务方法的实现    }}

4)工厂类

package controller.simpleFactoryModule;public class Factory {    //静态工厂方法    public static Product getProduct(String args){        Product product = null;        if(args.equals("A")){            product = new ConcreteProductA();            //初始化设置product        }else if(args.equals("B")){            product = new ConcreteProductB();            //初始化设置product        }        return product;    }}

5)主类调用工厂类

package controller.simpleFactoryModule;public class Client {    public static void main(String[] args) {        Product product;        product = Factory.getProduct("A");//通过工厂类创建产品对象        product.methodSame();        product.methodDiff();    }}

 

4.创建对象的几种方法

1)使用new关键字直接创建

    ==1)方便,但是不好。它把对对象的创建和使用放在了一起。如果在需要添加方法就需要改源码

2)通过反射机制创建

3)通过克隆方法创建

4)通过工厂类创建

    ==1)相比new方法,A类和B类仅仅存在A创建B,或者A使用B,不会同时存在这两种关系

    ==2)防止用来实例化一个类的数据和代码在多个类中到处使用

    ==3)一个类可以有多个构造函数,满足不同的情况

 

5.简单工厂模式的简化

可以将抽象产品类和工厂类合并,将静态工厂方法移到抽象产品类中

 

6.简单工厂模式的优缺点

优:

1)实现对象创建和使用的分离

2)对于使用者更友好

3)引入配置文件,可以不用修改代码更新产品类

 

缺:

1)工厂类职责过重,一旦不能正常工作,整个系统都要受到影响

2)会增加类的数量,增加系统复杂度

3)一旦添加新产品,就需要修改工厂逻辑,不利于维护和拓展

4)因为使用静态工厂方法,导致无法形成基于继承的等级结构

 

7.简单工厂模式的试用环境

1)创建对象较少

2)客户端只知道传入工厂类的参数吗,不关心如何创建对象

 

 

转载地址:http://yzmoz.baihongyu.com/

你可能感兴趣的文章
NIO基于UDP协议的网络编程
查看>>
NIO笔记---上
查看>>
Vue3.0中的响应式原理(第九课)
查看>>
NIO蔚来 面试——IP地址你了解多少?
查看>>
NISP一级,NISP二级报考说明,零基础入门到精通,收藏这篇就够了
查看>>
NISP国家信息安全水平考试,收藏这一篇就够了
查看>>
NIS服务器的配置过程
查看>>
NIS认证管理域中的用户
查看>>
Nitrux 3.8 发布!性能全面提升,带来非凡体验
查看>>
NiuShop开源商城系统 SQL注入漏洞复现
查看>>
NI笔试——大数加法
查看>>
NLog 自定义字段 写入 oracle
查看>>
NLog类库使用探索——详解配置
查看>>
NLP 基于kashgari和BERT实现中文命名实体识别(NER)
查看>>
NLP 时事和见解【2023】
查看>>
NLP 模型中的偏差和公平性检测
查看>>
Vue3.0 性能提升主要是通过哪几方面体现的?
查看>>
NLP 项目:维基百科文章爬虫和分类【01】 - 语料库阅读器
查看>>
NLP_什么是统计语言模型_条件概率的链式法则_n元统计语言模型_马尔科夫链_数据稀疏(出现了词库中没有的词)_统计语言模型的平滑策略---人工智能工作笔记0035
查看>>
NLP、CV 很难入门?IBM 数据科学家带你梳理
查看>>