Java设计模式之003--工厂模式

工厂模式(Factory Pattern 是 Java 中最常用的设计模式之一。 这种类型的设计模式属于创建型模式, 它提供了一种创建对象的最佳方式。

在工厂模式中, 我们在创建对象时不会对客户端暴露创建逻辑, 并且是通过使用一个共同的接口来指向新创建的对象。

工厂模式让调用者与被调用者之间解耦 :当两者发生变化时, 相互之间的影响降到最低, 这个原则体显了项目的可维护性 。

优点:面向接口编程, 体现了面向对象的思想; 将创建对象的工作转移到了工厂类;

JDK 中的工厂设计模式实例 :
a.java.util.Calendar, ResourceBundle and NumberFormat getInstance() 使用了工厂方法模式;
b.valueOf() 在包装类中, 如Boolean, Integer 也使用了工厂方法模式;
c.Spring框架中, 就是使用了工厂模式来解决对象的创建。

举例说明:创建不同的产品对象,例如手机、电脑。

a.创建接口,以供不同产品去实现

public interface Product {    public void work();}

b.以供不同对象类去实现接口的方法

public class Computer implements Product {    @Override    public void work() {        System.out.println("电脑开始工作...");    }}
public class Phone implements Product {    @Override    public void work() {        System.out.println("手机开始工作...");    }}

c.定义工厂类来创建对象

public class ProductFactory {    public static Product getProduct(String name) {        if("phone".equals(name)){        //可将"phone"配置到文件中获取出来            return new Phone();        }else if ("computer".equals(name)){  //可将"computer"配置到文件中获取出来            return new Computer();        }else{            throw new ProductException("procuct 不存在!");  //自定义异常ProductException        }  }}

测试对比:

public class Test {    public static void main(String[] args) {//1        Product p = new Phone();//1        p.work();

//2 工厂模式:让对象之间的强依赖,转化成对工厂对象的依赖        Product p = ProductFactory.getProduct("phone");  //可将"phone"配置到文件中获取出来        p.work();    }}
(0)

相关推荐

  • 设计模式之工厂模式(factory pattern)

    工厂顾名思义就是创建产品,根据产品是具体产品还是具体工厂可分为简单工厂模式和工厂方法模式,根据工厂的抽象程度可分为工厂方法模式和抽象工厂模式.该模式用于封装和管理对象的创建,是一种创建型模式.本文从一 ...

  • 【设计模式】工厂方法模式

    定义 定义一个用于创建对象的接口,让子类决定实例化哪一个类.工厂方法使一个类的实例化延迟到其子类 优缺点 优点 针对简单工厂不容易扩展,工厂方法将实例化延迟到子类工厂,从而提供扩展 缺点 每次新增产品 ...

  • 常见的设计模式及应用场景

    一.单例模式 单例模式是一种常用的软件设计模式,在应用这个模式时,单例对象的类必须保证只有一个实例存在,整个系统只能使用一个对象实例. 优点:不会频繁地创建和销毁对象,浪费系统资源. 使用场景:IO ...

  • 如何学习23种设计模式及其思想?

    感觉设计模式是看着简单 ,但是一用就不会,23种设计模式,学的人头大,相信大家都是这样的 设计模式在程序员的面试中会被考到,通常是介绍其原理并说出优缺点.或者对比几个比较相似的模式的异同点.在笔试中可 ...

  • 【设计模式】简单工厂模式

    定义 通过工厂类提供的方法,创建不同的派生类 通常创建的类都具有共同的基类/接口 优缺点 优点 客户端与具体的实现类解耦 缺点 新增产品需要修改原来工厂类的方法,不符合开闭原则 角色 客户端 --&g ...

  • Java设计模式之002--策略模式

    策略模式(Strategy Pattern) :定义了一系列的算法, 将每一种算法封装起来并可以相互替换使用, 策略模式让算法独立于使用它的客户应用而独立变化. OO设计原则: 1.面向接口编程(面向 ...

  • 工厂模式(Factory Pattern)

    Factory Pattern 创造型设计模式,提供一个创造对象的方式,在工厂模式中,创造对象的逻辑不对外暴露创建,只提供一个创建的接口. 定义一个创建对象的接口,其子类决定去创建哪一个实例对象,创建 ...

  • 无废话设计模式(11)结构型模式--代理模式

    0-前言 代理模式定义:为其他对象提供一种代理以控制对这个对象的访问. 1-实现 1-1.简单UML图: 1-2.代码实现 //1.抽象父类 abstract class Actor { public ...

  • PHP设计模式之简单工厂模式

    PHP设计模式之简单工厂模式 先从简单工厂入门,不管是面试还是被他人面试,在问到设计模式的时候,大多数人都会提到工厂模式.毫无疑问,工厂相关的几种模式在设计模式中是最出名的也是应用比较广泛的一种模式. ...

  • PHP设计模式之抽象工厂模式

    PHP设计模式之抽象工厂模式 工厂模式系列中的重头戏来了,没错,那正是传闻中的抽象工厂模式.初次听到这个名字的时候你有什么感觉?反正我是感觉这货应该是非常高大上的,毕竟包含着"抽象" ...

  • [PHP小课堂]PHP设计模式之简单工厂模式

    PHP设计模式之工厂方法模式 关注公众号:[硬核项目经理]获取最新文章 添加微信/QQ好友:[DarkMatterZyCoder/149844827]免费得PHP.项目管理学习资料

  • [PHP小课堂]PHP设计模式之抽象工厂模式

    [PHP小课堂]PHP设计模式之抽象工厂模式 关注公众号:[硬核项目经理]获取最新文章 添加微信/QQ好友:[DarkMatterZyCoder/149844827]免费得PHP.项目管理学习资料

  • Java设计模式之004--代理模式

    代理模式(Proxy) : 为其他对象提供一种代理以控制对这个对象的访问. 代理模式说白了就是"真实对象" 的代表, 在访问对象时引入一定程度的间接性, 因为这种间接性可以附加多种 ...

  • 图解Java设计模式之中介者模式

    智能家庭项目 传统方案解决智能家庭管理问题 中介者模式基本介绍 中介者模式的原理类图 中介者模式 - 智能家庭的操作流程 中介者模式的注意事项和细节 智能家庭项目 1)智能家庭包括各种设备,闹钟.咖啡 ...

  • 深入学习《大话设计模式》 简单工厂模式

    简单工厂模式 定义:封装改变,既然要封装改变,自然也就要找到需要更改的代码,然后将需要更改的代码用类来封装,这样的思路就是我们简单工厂模式的实现方式了 下面我们通过一则小故事来简述一下我们在项目中为什 ...