Bootstrap

SSM源码分析之23种设计模式(工厂模式)

前言

很多人看源码没有头绪,一个很大的原因在于对于23种我们约定俗成的设计模式所知甚少,分析源码之前,有必要说一下设计模式。

设计模式的关系

在这里插入图片描述
根据上图的关系,我们可以看出以下几个模式是跟其他的模式关联相当密切的,也就是我们需要重点掌握的几种设计模式:

  • 工厂模式(包括工厂方法模式,抽象工厂模式)
  • 单例模式
  • 原型模式
  • 代理模式
  • 策略模式
  • 模板模式
  • 委派模式
  • 适配器模式
  • 装饰器模式
  • 观察者模式

今天讲一下23种设计模式中的工厂模式。

工厂模式的种类

工厂模式分为:

  • 简单工厂模式
  • 工厂方法模式
  • 抽象工厂模式

为了便于理解,这里做一个小案例:

1、首先制造一个牛奶类:

public interface Milk {

    /**
     * 获取一个标准产品
     * @return
     */
    public String getName();

}

2、然后制造很多的具体牛奶类,实现这个接口:

蒙牛类:

public class Mengniu implements Milk {

    public String getName() {
        return "蒙牛";
    }
}

特仑苏类:

public class Telunsu implements Milk {

    public String getName() {
        return "特仑苏";
    }
}

伊利类:

public class Yili implements  Milk {

    public String getName() {
        return "伊利";
    }
}

简单工厂模式

1、创建一个简单工厂

public class SimpleFactory {
    public Milk getMilk(String name){
        if("特仑苏".equals(name)){
            return new Telunsu();
        }else if("伊利".equals(name)){
            return new Yili();
        }else if("蒙牛".equals(name)){
            return new Mengniu();
        }else {
            System.out.println("不能生产您所需的产品");
            return null;
        }
    }
}

2、测试简单工厂模式

    public static void main(String[] args) {
    
        //这个new的过程实际上一个比较复杂的过程
        //有人民币及不需要自己new了
        System.out.println(new Telunsu().getName());

        //小作坊式的生产模式
        //用户本身不再关心生产的过程,而只需要关心这个结果
        //假如:特仑苏、伊利、蒙牛
        //成分配比都是不一样的
        SimpleFactory factory = new SimpleFactory();

        //把用户的需求告诉工厂
        //创建产品的过程隐藏了,对于用户而且完全不清楚是怎么产生的
        System.out.println(factory.getMilk("特仑苏").getName());
    }

工厂方法模式

1、创建工厂

public interface Factory {

    //工厂必然具有生产产品技能,统一的产品出口
    Milk getMilk();

}

2、创建工厂实现类

public class MengniuFactory implements  Factory {
    public Milk getMilk() {
        return new Mengniu();
    }
}
public class TelunsuFactory implements Factory {
    public Milk getMilk() {
        return new Telunsu();
    }
}
public class YiliFactory implements Factory {
    public Milk getMilk() {
        return new Yili();
    }
}

3、测试工厂方法模式

   public static void main(String[] args) {
        //System.out.println(new Factory().getMilk(););
        //货比三家
        //不知道谁好谁好谁坏
        //配置,可能会配置错
        Factory factory = new SanluFactory();
        System.out.println(factory.getMilk());
    }

抽象工厂模式

抽象工厂是用户的主入口,在Spring中应用得最为广泛的一种设计模式 ,易于扩展!

1、创建抽象工厂


public abstract class AbstractFactory {

    //公共的逻辑
    //方便于统一管理

    /**
     * 获得一个蒙牛品牌的牛奶
     * @return
     */
    public  abstract Milk getMengniu();

    /**
     * 获得一个伊利品牌的牛奶
     * @return
     */
    public abstract  Milk getYili();

    /**
     * 获得一个特仑苏品牌的牛奶
     * @return
     */
    public  abstract  Milk getTelunsu();

}

2、创建抽象工厂实现类

public class MilkFactory extends  AbstractFactory {

    @Override
    public Milk getMengniu() {
        return new Mengniu();
    }
    
    @Override
    public Milk getYili() {
        return new Yili();
    }
    
    @Override
    public Milk getTelunsu() {
        return new Telunsu();
    }
}

3、测试抽象工厂模式

    public static void main(String[] args) {

        MilkFactory factory = new MilkFactory();
        //对于用户而言,更加简单了
        //用户只有选择的权利了,保证了程序的健壮性
        System.out.println(factory.getMengniu());
    }

资源分享

工厂模式代码分享:https://github.com/harrypottry/steamvip
23种设计模式pdf:https://pan.baidu.com/s/1vT98B07PYlNNi_ua-E-ROg[分享码:2hxs

;