前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >设计模式(一):简单工厂模式

设计模式(一):简单工厂模式

作者头像
Java架构师必看
发布2021-05-14 14:40:30
2650
发布2021-05-14 14:40:30
举报
文章被收录于专栏:Java架构师必看

设计模式(一):简单工厂模式

强烈推介IDEA2020.2破解激活,IntelliJ IDEA 注册码,2020.2 IDEA 激活码

模式动机 ​ 做过Web开发的开发者都知道,在将用户的密码存储在数据库中时,我们需要将密码首先加密然后在写入数据库。 在Java中,我们常用的加密手段有MD5、RSA等。我们使用的代码是:

代码语言:javascript
复制
KeyPairGenerator.getInstance("RSA");

如果我们需要使用MD5时传入的参数就是MD5。这里,就是我们今天需要讲解的简单工厂模式。

模式定义 ​ 简单工厂模式又称为静态工厂模式,这个模式数据创建式模式。在简单工厂模式中,根据传入的参数,返回不同类的实例。

模式结构 简单工厂模式包含如下角色:

1.Factory:工厂角色

​ 工厂角色负责实现创建所有实例的内部逻辑

2.Product:抽象产品角色

​ 抽象产品角色是所创建的所有对象的父类,负责描述所有实例所共有的公共接口

3.ConcreteProduct:具体产品角色

​ 具体产品角色是创建目标,所有创建的对象都充当这个角色的某个具体类的实例。

代码示例 这里我们首先创建一个抽象对象Product:

代码语言:javascript
复制
package cn.edu.hust.simpleFactory;

public abstract class Product {
   
    public abstract void use();
}

然后创建两个实现类ProductA和ProductB

代码语言:javascript
复制
package cn.edu.hust.simpleFactory;

public class ProductA extends Product
{
   
    @Override
    public void use() {
   
        System.out.println("using ProductA");
    }
}
代码语言:javascript
复制
package cn.edu.hust.simpleFactory;

public class ProductB extends Product {
   
    public void use() {
   
        System.out.println("using productB");
    }
}

最后创建一个工厂类

代码语言:javascript
复制
package cn.edu.hust.simpleFactory;

public class ProductFactory {
   
    public Product createProduct(String productType)
    {
   
        if("ProductA".equals(productType))
        {
   
            return new ProductA();
        }
        else
        {
   
            return new ProductB();
        }
    }

工厂类根据参数返回不同的实现类。

模式优点

  • 工厂类含有必要的判断逻辑,可以决定在什么时候创建哪一个产品类的实例,客户端可以免除直接创建产品对象的责任,而仅仅“消费”产品;简单工厂模式通过这种做法实现了对责任的分割,它提供了专门的工厂类用于创建对象。
  • 客户端无须知道所创建的具体产品类的类名,只需要知道具体产品类所对应的参数即可,对于一些复杂的类名,通过简单工厂模式可以减少使用者的记忆量。
  • 通过引入配置文件,可以在不修改任何客户端代码的情况下更换和增加新的具体产品类,在一定程度上提高了系统的灵活性。

模式缺点

  • 由于工厂类集中了所有产品创建逻辑,一旦不能正常工作,整个系统都要受到影响。
  • 使用简单工厂模式将会增加系统中类的个数,在一定程序上增加了系统的复杂度和理解难度。
  • 系统扩展困难,一旦添加新产品就不得不修改工厂逻辑,在产品类型较多时,有可能造成工厂逻辑过于复杂,不利于系统的扩展和维护。
  • 简单工厂模式由于使用了静态工厂方法,造成工厂角色无法形成基于继承的等级结构。

模式应用 JDK类库中广泛使用了简单工厂模式,如工具类java.text.DateFormat,它用于格式化一个本地日期或者时间。

代码语言:javascript
复制
public final static DateFormat getDateInstance();
public final static DateFormat getDateInstance(int style);
public final static DateFormat getDateInstance(int style,Locale locale);
  • Product:抽象产品角色抽象产品角色是所创建的所有对象的父类,负责描述所有实例所共有的公共接口具体产品角色是创建目标,所有创建的对象都充当这个角色的某个具体类的实例。

原文:https://github.com/oeljeklaus-you/Design-Patterns/blob/master/%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F(%E4%B8%80)%E7%AE%80%E5%8D%95%E5%B7%A5%E5%8E%82%E6%A8%A1%E5%BC%8F.md

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档