Java 设计模式之 简单工厂模式(静态工厂方法模式)

简单工厂模式(Simple Factory Pattern)属于类的创新型模式,又叫静态工厂方法模式(Static FactoryMethod Pattern),是通过专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类(或者父接口)

简单工厂模式的  UML 图:

(1)抽象(Product)产品角色:简单工厂模式所创建的所有对象的父类,注意,这里的父类可以是接口也可以是抽象类,它负责描述所有实例所共有的公共接口。

(2)具体产品(Concrete Product)角色:简单工厂所创建的具体实例对象,这些具体的产品往往都拥有共同的父类。

(3)工厂角色(Creator):这是简单工厂模式的核心,由它负责创建所有的类的内部逻辑。当然工厂类必须能够被外界调用,创建所需要的产品对象。

代码:

(1)抽象产品角色:

package com.liwei.factory.simple;
/**
 * 抽象(Product)产品角色
 * 负责描述所有实例的公共接口
 * @author Administrator
 *
 */
public interface Doll {
    public void getInfo();
}

(2)具体产品角色

package com.liwei.factory.simple;

public class BarbieDoll implements Doll {

    @Override
    public void getInfo() {
        System.out.println("我是芭比娃娃");
    }

}
package com.liwei.factory.simple;

public class ClothDoll implements Doll {

    @Override
    public void getInfo() {
        System.out.println("我是布娃娃");
    }

}

(3)工厂角色:

package com.liwei.factory.simple;

public class DollFactory {
    public static Doll getInstance(String name){
        if("barbie".equals(name)){
            return new BarbieDoll();
        }else if("cloth".equals(name)){
            return new ClothDoll();
        }else{
            return null;
        }
    }
}

(4)测试类:

package com.liwei.factory.simple;

public class Client {
    public static void main(String[] args) {
        Doll doll1 = DollFactory.getInstance("cloth");
        doll1.getInfo();
        Doll doll2 = DollFactory.getInstance("barbie");
        doll2.getInfo();
    }
}

由原来的直接依赖,变为依赖工厂了。只是把依赖关系转移了。

时间: 2024-10-08 05:09:50

Java 设计模式之 简单工厂模式(静态工厂方法模式)的相关文章

【C#设计模式——创建型模式】工场方法模式

工场方法模式对简单工场模式进行了乔庙的扩展,不是用一个专门的类来决定实例化哪一个子类.相反,超类把这种决定延迟到每个子类.这种模式实际上没有决策点,就是没有直接选择一个子类实例化的决策. 看书上的例子有点复杂,自己写了一个简单例子: 示例目标:对数组进行定向排序 基类FormatList对指定数组进行排序,具体实现交给子类实现 public abstract class FormatList { public int[] result; protected abstract void Forma

原型模式和模版方法模式

首先我们来了解原型模式 定义:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象 根据定义,我们很明显地知道原型模式的对象是类.通过原型模式,我们可以无限地复制原型的对象 接着我们了解模版方法模式 定义:定义了一个操作中的算法的骨架,而将一些步骤延迟到子类中.模版方法使用使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤. 其实就是规定完成某件事情需要做多少步,并且规定那些需要你发挥自己的想象.能力根据实际情况去完成的. 综上所述.这两种设计模式的对象不同.原型是一个大的

(1)java设计模式之简单工厂模式

一:简单工厂模式的优点          --->在阎宏博士的<JAVA与模式>一书中开头是这样描述简单工厂模式的:简单工厂模式是类的创建模式,又叫做静态工厂方法(Static Factory Method)模式.简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例. --->模式的核心是工厂类.这个类含有必要的逻辑判断,可以决定在什么时候创建哪一个登录验证类的实例,而调用者则可以免除直接创建对象的责任.简单工厂模式通过这种做法实现了对责任的分割,当系统引入新的登录方式的时候无

简单工厂模式(静态工厂方法模式)【设计模式】

定义:提供一个创建实例的功能,客户端使用者无需关心实例的具体实现.被创建实例可以是接口.抽象类,也可以是具体的类.它又称为静态工厂方法(Static Factory Method)模式 简单工厂模式的作用,优点:为客户端屏蔽所需要的实例的具体实现,客户端只需关注某个接口便可,无需关注实现.具体实现被封装起来:客户端和具体实现解耦,客户端只需关注接口,接口的实现变化对客户端没有影响.总结起来,就是封装功能,封转实例的具体实现:解耦功能,接口实现的变化影响不了客户端. 例子: 例子1:不带参数 没有

php设计模式 — 简单工厂模式(静态工厂方法模式)

概念 简单工厂模式 [静态工厂方法模式](Static Factory Method) 是类的创建模式 工厂模式的几种形态: 1.简单工厂模式(Simple Factory) |又叫做  静态工厂方法模式(Static Factory Method) 2.工厂方法模式(Factory Method) |又叫做 多态性工厂模式(Polymorphic Factory) 3.抽象工厂模式(Abstract Factory) |又叫做 工具箱模式(ToolKit) 配图 代码实例 直接将代码运行即可,

Java设计模式学习笔记,二:工厂模式

工厂模式,主要实现了创建者和调用者的分离. 分类:1.简单工厂模式:2.工厂方法模式:3.抽象工厂模式. 核心:实例化对象时,用工厂方法代替new操作. 一.简单工厂模式 也叫静态工厂模式,工厂类中实现静态方法,根据入参,生产不同的产品,工程项目中常用. 工厂类作为类使用,产品类作为接口使用,具体产品实现接口,用来生产同一等级结构中的任意产品,当新增产品时,需要修改已有的代码. 1 package com.corey.factory.simpleFactory; 2 3 /** 4 * 产品类接

Java设计模式之简单工厂、工厂方法和抽象工厂

在前面的学习中(参见前面的博客),我们学到了很多OO原则: 封装变化 多用组合,少用继承 针对接口/超类编程,不针对实现编程 松耦合 开闭原则 让我们从一个简单的类开始,看看如何将之改造成符合OO原则的类以及工厂模式在解耦中的威力. class FoodStore { public Food orderFood() //通过此方法顾客从食物商店中得到食物 { Food food=new Food(); food.prepare(); // 准备食物 food.cut(); // 将食物切好 fo

【java设计模式】之 模板方法(Template Method)模式

1. 模板方法的一个实例 这一节主要来学习一下设计模式中的模板方法模式.我们先来看一个例子:假如现在老板让你做一个汽车的模型,要求只要完成基本功能即可,不考虑扩展性,那你会怎么做呢?我们首先会根据经验设计一个类图: 由这个类图可知,非常简单的实现了悍马车,该车有两个型号H1和H2.那现在我们开始实现这两个型号的悍马车,首先我们得把抽象类写好,然后两个不同的模型实现类通过简单的继承就可以实现要求.首先看看抽象类的代码: public abstract class HummerModel { pub

JAVA设计模式(17):行为型-模板方法模式(Template Method)

场景 客户到银行办理业务: 取号排队 办理具体现金/转账/企业/个人/理财业务 给银行工作人员评分 核心: 处理某个流程的代码已经都具备,但是其中某个节点的代码暂时不能确定.因此,我们采用工厂方法模式,,将这个节点的代码实现转移给子类完成. 即:处理步骤父类中定义好,具体实现延迟到子类中定义. 概述 模板方法模式是类的行为模式.准备一个抽象类,将部分逻辑以具体方法以及具体构造函数的形式实现,然后声明一些抽象方法来迫使子类实现剩余的逻辑.不同的子类可以以不同的方式实现这些抽象方法,从而对剩余的逻辑