设计模式~工厂模式-03

简介: 工厂模式简单工厂模式优点:缺点:工厂方法模式

工厂模式

简单工厂模式

优点:

缺点:

工厂方法模式

优点:

缺点:

简单工厂模式和工厂方法模式对比

       任何可以产生对象的方法或类,都称之为工厂。

       工厂模式是一种非常常用的创建型设计模式,其提供了创建对象的最佳方式。在创建对象时,不会对客户端暴露对象的创建逻辑,而是通过使用共同的接口来创建对象。

       【追"美女"少不了请吃饭了,麦当劳的鸡翅和肯德基的鸡翅都是"美女"爱吃的东西,虽然口味有所不同,但不管你带"美女"去麦当劳或肯德基,只管向服务员说「来四个鸡翅」就行了。麦当劳和肯德基就是生产鸡翅的Factory工厂模式:客户类和工厂类分开。

       消费者任何时候需要某种产品,只需向工厂请求即可。消费者无须修改就可以接纳新产品。缺点是当产品修改时,工厂类也要做相应的修改。如:如何创建及如何向客户端提供。】

简单工厂模式

       简单工厂模式本身是违背开闭原则的,虽可通过反射+配置文件解决,但总体来说不友好。

       简单工厂模式代码简单,虽有多处if分支且违背开闭原则,但扩展性和可读性尚可,这样的代码在大多数情况下并无问题。

优点

       调用者想创建一个对象,只需要知道其名称即可。

缺点

       违背开闭原则,每增加一个对象都需要修改工厂类。

       【开闭原则(Open Closed Principle)是Java世界里最基础的设计原则,它指导我们如何建立一个稳定的、灵活的系统。

       定义:一个软件实体如类、模块和函数应该对扩展开放,对修改关闭。

       开闭原则的含义是说一个软件实体应该通过扩展来实现变化,而不是通过修改已有代码来实现变化。】

工厂方法模式

       简单工厂模式违背了开闭原则,而工厂方法模式则是简单工厂模式的进一步深化,其不像简单工厂模式通过一个工厂来完成所有对象的创建,而是通过不同的工厂来创建不同的对象,每个对象有对应的工厂创建

优点

       (1)调用者想创建一个对象,只需要知道其名称即可。(2)扩展性高,如果增加一个类,只需要扩展一个工厂类。(3)对调用者屏蔽对象具体实现,调用者只需要关注接口。

缺点

       当增加一个具体类时,需要增加其对应的工厂类,在一定程度上增加了系统的复杂度。

简单工厂模式和工厂方法模式对比

       当对象的创建过程比较复杂,需要组合其他类对象做各种初始化操作时,推荐使用工厂方法模式,将复杂的创建逻辑拆分到多个工厂类中使得每个工厂类不过于复杂。而使用简单工厂模式则会将所有的创建逻辑都放到一个工厂类,会导致工厂类过于复杂。

/**
 * 接口
 */
public interface Moveable {
    void go();
}
/**
 * 继承Moveable
 */
public class Car implements  Moveable {
    public void go() {
        System.out.println("Car go wuwuwuwuw....");
    }
}
public class Broom implements Moveable{
    @Override
    public void go() {
        System.out.println("broom flying chuachuachua .....");
    }
}
/**
 * 简单工厂的可扩展性不好
 */
public class SimpleVehicleFactory {
    public Car createCar() {
        //before processing
        return new Car();
    }
    public Broom createBroom() {
        return new Broom();
    }
}
/**
 * 工厂方法
 */
public class CarFactory {
    public Moveable create() {
        System.out.println("a car created!");
        return new Car();
    }
}
public class Main {
    public static void main(String[] args) {
        //单列,任意定制生产过程
        Moveable m = new CarFactory().create();//工厂方法CarFactory
        m.go();
    }
}


目录
相关文章
|
14天前
|
设计模式 Java 关系型数据库
设计模式——工厂模式
工厂模式介绍、静态简单工厂模式、工厂方法模式、抽象工厂模式、JDK 源码分析
设计模式——工厂模式
|
3月前
|
设计模式 数据格式 XML
设计模式-工厂模式-1-1
【6月更文挑战第10天】本文介绍了工厂模式的两种主要类型:简单工厂和工厂方法。简单工厂模式通过工厂类动态创建对象,例如根据配置文件后缀选择不同解析器。为提高可读性和复用性,可将创建逻辑封装到独立类中。当需添加新解析器时,可能涉及对工厂类的修改,但这在偶尔调整时可接受。工厂方法模式则通过多态消除if分支,增加扩展性,更符合开闭原则。当需要新增解析器时,只需创建实现特定接口的新工厂类。
29 2
设计模式-工厂模式-1-1
|
3月前
|
设计模式 XML 缓存
设计模式-工厂模式-1-2
【6月更文挑战第11天】工厂模式用于封装对象创建,但当load函数与工厂类耦合时,问题出现。为解决此问题,引入了工厂的工厂,如`RuleConfigParserFactoryMap`,它创建并缓存工厂对象,简化了代码修改。然而,过多的Factory类会增加复杂性,简单工厂模式在此类应用中更为适用。当对象创建逻辑复杂,需组装其他对象或避免if-else时,采用工厂方法模式。抽象工厂则处理多维度分类的对象创建。总结:工厂模式的核心价值在于封装变化、代码复用、隔离复杂性和控制复杂度,适用于创建逻辑复杂的情况,否则直接使用new操作即可。
25 5
|
4月前
|
设计模式 算法 uml
C++设计模式(工厂模式)
C++设计模式(工厂模式)
76 1
C++设计模式(工厂模式)
|
10月前
|
设计模式 Java C#
设计模式之工厂模式(2)
接着,我们定义一个抽象工厂类AbstractFactory,它有两个抽象方法createShape和createColor,分别返回一个Shape对象和一个Color对象: java
45 0
|
设计模式
设计模式之工厂模式
设计模式之工厂模式
59 0
|
设计模式
【设计模式】工厂模式
【设计模式】工厂模式
|
设计模式 Java 数据库
设计模式之工厂模式(一)
设计模式之工厂模式
58 0
|
设计模式 SQL 搜索推荐
设计模式之工厂模式(二)
设计模式之工厂模式
107 0
|
设计模式 Java 测试技术
浅谈设计模式 - 工厂模式(六)
在第一篇里面已经介绍过简单工厂了,但是工厂模式里面不仅仅是简单工厂,还存在工厂方法和抽象工厂,并且从严格意义来讲简单工厂不能算是一种设计模式,本次的文章针对工厂的进化来展开讲一讲工厂模式的三种常见形式:简单工厂、工厂方法、抽象工厂。
63 0