设计模式-简单工厂模式(静态工厂模式)java实现

介绍

简单工厂模式根据所提供的参数数据返回几个可能类中的一个类的实例。通常返回的类都有一个公共的父类和公共的方法。

意图

提供一个类,负责根据一定的条件创建某一具体类的实例。同时使用工厂模式也是为了隐藏创建对象的过程

角色及其职责

(1)工厂(Creator)角色:是简单工厂模式的核心,负责实现创建所有实例的内部逻辑。工厂类可以被外界直接调用,创建所需的产品对象。

(2) 抽象(Produet)角色:是简单工厂模式所创建的所有对象的父类,负责描述所有实例所共有的公共接口。

(3) 具体产品(Concrete Product)角色:是简单工厂模式的创建目标,所有创建的对象

都是充当这个角色的某个具体类的实例。一般来讲,它是抽象产品类的子类,实现了抽象产

品类中定义的所有接口方法。

在工厂角色中可以通过参数来判断创建哪种具体的产品子类对象,这个参数可以通过配置文件获取,也可以作为方法参数传入。

例子

下面我来实现一下

一个产品接口,两个产品类Chair,Desk,一个工厂类,通过参数来决定创建哪个具体产品

产品接口

java 复制代码
public interface MyProduct {
    //返回产品的具体名称
    String getProductName();
}

具体产品

java 复制代码
public class Chair implements MyProduct{
    @Override
    public String getProductName() {
        return "椅子";
    }
}
java 复制代码
public class Desk implements MyProduct{
    @Override
    public String getProductName() {
        return "桌子";
    }
}

工厂类

java 复制代码
/**
 * @Classname MyProductFactory
 * @author: 我心
 * @Description: 产品工厂类
 * @Date 2022/11/26 21:51
 * @Created by Lenovo
 */
public class MyProductFactory {
    public MyProduct getProduct(String code){
        MyProduct product=null;//要返回的产品对象
        //如果参数是c,则创建Chair对象
        if (code.equals("c")){
            product=new Chair();
        }
        //如果参数是d,则创建Desk对象
        else if( code.equals("d")){
            product=new Desk();
        }
        return product;
    }
}

运行代码

java 复制代码
public class Main {
    public static void main(String[] args) {
        //这时候我们就不需要关注具体创建的是什么对象,只需要知道它是所需的产品即可,隐藏了创建对象的细节
        MyProductFactory productFactory=new MyProductFactory();
        //然后我们直接调用产品的公共接口方法使用即可,不管是什么产品,都实现了这一个接口,我们也不需要关注接口的细节
        MyProduct c = productFactory.getProduct("c");
        System.out.println(c.getProductName());
    }
}

运行结果

相关推荐
敲代码的 蜡笔小新2 小时前
【行为型之访问者模式】游戏开发实战——Unity灵活数据操作与跨系统交互的架构秘诀
unity·设计模式·c#·访问者模式
软考真题app16 小时前
软件设计师考试结构型设计模式考点全解析
设计模式·软件设计师·结构型设计模式·考试考点
xiaolin033321 小时前
【设计模式】- 行为型模式1
设计模式·状态模式·责任链模式·策略模式·命令模式·模板方法模式·行为型模式
沐土Arvin1 天前
深入理解 requestIdleCallback:浏览器空闲时段的性能优化利器
开发语言·前端·javascript·设计模式·html
bao_lanlan1 天前
兰亭妙微:用系统化思维重构智能座舱 UI 体验
ui·设计模式·信息可视化·人机交互·交互·ux·外观模式
总是难免1 天前
设计模式 - 单例模式 - Tips
java·单例模式·设计模式
Java致死1 天前
设计模式Java
java·开发语言·设计模式
ghost1432 天前
C#学习第23天:面向对象设计模式
开发语言·学习·设计模式·c#
敲代码的 蜡笔小新2 天前
【行为型之迭代器模式】游戏开发实战——Unity高效集合遍历与场景管理的架构精髓
unity·设计模式·c#·迭代器模式
敲代码的 蜡笔小新3 天前
【行为型之命令模式】游戏开发实战——Unity可撤销系统与高级输入管理的架构秘钥
unity·设计模式·架构·命令模式