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

23.设计模式--简单工厂模式(Simple Factory模式)

作者头像
大猫的Java笔记
发布2021-11-30 11:40:02
2320
发布2021-11-30 11:40:02
举报
文章被收录于专栏:大猫的Java笔记大猫的Java笔记

1.定义

简单工厂模式作为最后一个设计模式是因为简单工厂模式不在23种设计模式中,但是如果不在23种设计模式中的话,那不是才22种,原因是之前在写设计模式之前,已经写过了单例模式,所以单例模式实际上可以在对应的目录中寻找。

简单工厂模式非常的简单,定义一个工厂类,他可以根据参数的不同返回不同类的实例,被创建的实例通常都具有共同的父类。

2.简单工厂模式结构图

Product是产品的抽象,图中只是定义了打印产品名字的方法,Computer和Phone是具体的产品,而Factory作为工厂则是对根据传入的值创建不同的产品的实例。

3.简单工厂模式实现

定义抽象的产品类,并且定义抽象方法打印产品名称,而具体的实现交给子类。

代码语言:javascript
复制
public interface Product {

    void printName();
}

Computer和Phone都实现于Product,他俩都是具体的产品。

代码语言:javascript
复制
public class Computer implements Product{
    @Override
    public void printName() {
        System.out.println("电脑产品");
    }
}
代码语言:javascript
复制
public class Phone implements Product{
    @Override
    public void printName() {
        System.out.println("手机产品");
    }
}

Factory是用于创建具体的产品,创建的规则则是根据传入的参数不同来创建不同的产品。

代码语言:javascript
复制
public class Factory {

    private Factory() {
    }

    public static Product createProduct(String name){
        if("Computer".equals(name)){
            return new Computer();
        } else if("Phone".equals(name)){
            return new Phone();
        }
        return null;
    }
}

Test就是调用者,通过传入不同的产品名让工厂创建不同的产品。

代码语言:javascript
复制
public class Test {
    public static void main(String[] args) {
        Factory.createProduct("Computer").printName();
        Factory.createProduct("Phone").printName();
    }
}
代码语言:javascript
复制
电脑产品
手机产品

简单工厂模式中的角色

Product(产品),用于定于产品的抽象行为,文中由Product扮演此角色

ConcreteProduct(具体产品),是实现于产品的类,文中由Computer和Phone扮演此角色。

Factory(工厂),根据传入的参数不同来决定创建那个具体的产品,文中由Factory扮演此角色。

简单工厂模式只是解决了调用者不用关心产品具体是怎么创建的,但是一旦需要新增一个产品的时候,创建工厂的判断逻辑都需要进行更改。

代码获取地址:https://gitee.com/bughong/design-pattern

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-11-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 大猫的Java笔记 微信公众号,前往查看

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

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

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