设计模式~工厂模式-03

21 篇文章 0 订阅
1 篇文章 0 订阅

工厂模式

简单工厂模式

优点:

缺点:

工厂方法模式

优点:

缺点:

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

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

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

        【追"美女"少不了请吃饭了,麦当劳的鸡翅和肯德基的鸡翅都是"美女"爱吃的东西,虽然口味有所不同,但不管你带"美女"去麦当劳或肯德基,只管向服务员说「来四个鸡翅」就行了。麦当劳和肯德基就是生产鸡翅的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();
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

唐曌

谢谢支持

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值