设计模式系列--设计模式之工厂模式

一 概述

工厂模式可以分为更加细分的类型:简单工厂、工厂方法、和抽象方法。

面向对象设计的基本原则:

  1. OCP(开闭原则, Open-Closed Principle):一个软件的实体应当对扩展开放,对修改关闭。

  2. DIP(依赖倒转原则,Dependence Inversion Principle):要针对接口编程,不要针对实现编程。

  3. LoD(迪米特法则, Law of Demeter):只与你直接的朋友通信,而避免和陌生人通信。

二、简单工厂模式(静态工厂模式)

我喜欢吃面条,抽象一个面条基类,(接口也可以),这是产品的抽象类。

public abstract class INoodles {
     /**
      * 描述每种面条啥样的
	 */
    public abstract void desc();
 }

先来一份兰州拉面(具体的产品类):

 public class LzNoodles extends INoodles {
     @Override
     public void desc() {
         System.out.println("兰州拉面 上海的好贵 家里才5 6块钱一碗");
    }
 }

程序员加班必备也要吃泡面(具体的产品类):

public class PaoNoodles extends INoodles {
     @Override
     public void desc() {
         System.out.println("泡面好吃 可不要贪杯");
     }
 }

还有我最爱吃的家乡的干扣面(具体的产品类):

public class GankouNoodles extends INoodles {
     @Override
     public void desc() {
        System.out.println("还是家里的干扣面好吃 6块一碗");
     }
 }

准备工作做完了,我们来到一家“简单面馆”(简单工厂类),菜单如下:

public class SimpleNoodlesFactory {
    public static final int TYPE_LZ = 1;//兰州拉面
    public static final int TYPE_PM = 2;//泡面
    public static final int TYPE_GK = 3;//干扣面

    public static INoodles createNoodles(int type) {
        switch (type) {
            case TYPE_LZ:
                return new LzNoodles();
            case TYPE_PM:
                return new PaoNoodles();
            case TYPE_GK:
            default:
                return new GankouNoodles();
        }
    }
}

简单面馆就提供三种面条(产品),你说你要啥,他就给你啥。这里我点了一份干扣面:

扫描二维码关注公众号,回复: 12347046 查看本文章
 /**
  * 简单工厂模式
  */
  INoodles noodles = SimpleNoodlesFactory.createNoodles(SimpleNoodlesFactory.TYPE_GK);
  noodles.desc()

要点:
1)简单工厂模式也叫静态工厂模式,就是工厂类一般使用静态方法,通过接收的参数的不同的对象的不同来返回不同的对象实例。
2)对于增加新产品无能为力!不修改代码的话,是无法扩展的。
3)一般使用较多还是简单工厂模式。

三、工厂方法模式

1)为了避免简单工厂模式的缺点,不完全满足OCP(开闭原则)。

2)工厂方法模式和简单工厂模式最大的不同在于,简单工厂模式只有一个(对于一个项目或者一个独立模块而言)工厂类,而工厂方法模式有一组实现了相同接口的工厂类。
https://www.cnblogs.com/laojiao/p/9574680.html

猜你喜欢

转载自blog.csdn.net/hgdzw/article/details/107620901