入门设计模式之工厂模式

简介: 版权声明:本文为博主原创文章,未经博主允许不得转载。博客源地址为zhixiang.org.cn https://blog.csdn.net/myFirstCN/article/details/80866216 学习更多设计模式请参考:入门设计模式之汇总篇简单工厂:入门级的设计模式之一,也是学习工厂模式的的基础。
版权声明:本文为博主原创文章,未经博主允许不得转载。博客源地址为zhixiang.org.cn https://blog.csdn.net/myFirstCN/article/details/80866216

学习更多设计模式请参考:入门设计模式之汇总篇


简单工厂:


入门级的设计模式之一,也是学习工厂模式的的基础。


需求:假如我们需要去相亲,介绍人跟你说了,我这次给你找了很多个小姑娘,随便挑哦。

听到这句话你就好奇了,哎呦,你好厉害呀,怎么做到的呢,下面我们就来看看介绍人是怎么做到吧。

注:不熟悉UML的同学请参考此文章:几分钟几张图教你学会如何使用UML

  • 首先最上方就是所有女孩必须要实现的接口,它定义了一个自我介绍的方法,所有的女孩都要实现它。
  • 下面给出的两个实现类分别为一个温柔的女孩还有一个彪悍的女孩
  • 而工厂类型提供了一个getGirl方法,根据客户的要求,提供对应的女孩。

来看代码:

public interface SimpleInterface {
   public void say();
}

public class TenderGirl implements  SimpleInterface{
    @Override
    public void say() {
        System.out.println("人家是一个淡淡的女子。。。");
    }
}

public class ToughGirl implements  SimpleInterface{
    @Override
    public void say() {
        System.out.println("你瞅啥。。。");
    }
}

public class SimpleFactory {
    public static SimpleInterface getGirl(String type) throws Exception {
        SimpleInterface girl=null;
        switch (type) {        //注意此处jdk1.8以后才支持此写法
            case "温柔":
                girl=new TenderGirl();
                break;
            case "彪悍":
                girl=new ToughGirl();
                break;
            default:
                throw new Exception("Not Girl");
        }
        return girl;
    }
}

上方给出了一个简单工厂的简单实现,但是仔细一想,不对呀,那要是再来个例如高冷类型的女孩子怎么办呀,难道我们要去修改getGirl方法么,这样可不符合我们的开闭原则呀。那要不我们就看工厂模式有没有解决这个问题吧

工厂模式:





工厂模式与简单工厂的区别就是把原先的工厂类抽象出来了,这个时候每当增加一个女孩的时候我们不需要修改代码,只需要增加一个工厂就够了。来看一下实现吧(注:女孩的接口和实现类请参考上方的简单工厂,这里就不给出了)

public interface AbstractFactory {
    public Girl getGirl();
}

public class TenderGirlFactory implements AbstractFactory {
    @Override
    public Girl getGirl() {
        return new TenderGirl();
    }
}

public class ToughGirlFactory implements AbstractFactory {
    @Override
    public Girl getGirl() {
        return new ToughGirl();
    }
}

抽象工厂:


抽象工厂的出现目的是为了解决产品族的问题,什么是产品族呢?

举一个离我们最近的例子:我们在开发中使用最多的是什么,电脑。我们有的人电脑是Windows的有的是Linux的当我们开发的时候需要很多的软件,JDK和Tomcat等,不同的系统安装不同格式的软件,这里不同格式的软件就是产品族了。先来看一下类图


这个类图初看可能比较复杂,但是我想它还是很好理解的

  • 我们看一下工厂类,抽象工厂定义接口,Linux工厂和Windows分别生成试用自己系统的软件
  • JDK类和Tomcat类就负责了自己的职责,分别提供支持两种系统的软件
  • 如果后期增加Unix系统也不会对原有的系统进行更改,完全符合开闭原则。


那么,你get到了工厂模式了么?




本文出自https://zhixiang.org.cn/#/blog/read/66c32767-117e-4474-9e10-3d0914d1bd82,转载请保留。


相关文章
|
2月前
|
设计模式 Java
【设计模式】工厂模式(定义 | 特点 | Demo入门讲解)
【设计模式】工厂模式(定义 | 特点 | Demo入门讲解)
62 2
|
2月前
|
设计模式 XML Java
【设计模式】装饰器模式(定义 | 特点 | Demo入门讲解)
【设计模式】装饰器模式(定义 | 特点 | Demo入门讲解)
34 0
|
2月前
|
设计模式 传感器
【设计模式】观察者模式(定义 | 特点 | Demo入门讲解)
【设计模式】观察者模式(定义 | 特点 | Demo入门讲解)
44 0
|
7月前
|
设计模式 监控 安全
多线程设计模式【多线程上下文设计模式、Guarded Suspension 设计模式、 Latch 设计模式】(二)-全面详解(学习总结---从入门到深化)
多线程设计模式【多线程上下文设计模式、Guarded Suspension 设计模式、 Latch 设计模式】(二)-全面详解(学习总结---从入门到深化)
115 0
|
2月前
|
设计模式 算法 Java
【设计模式】策略模式(定义 | 特点 | Demo入门讲解)
【设计模式】策略模式(定义 | 特点 | Demo入门讲解)
30 0
|
3月前
|
设计模式 C# 开发者
C#设计模式入门实战教程
C#设计模式入门实战教程
|
5月前
|
设计模式 Java 数据安全/隐私保护
Java中的设计模式:从入门到精通
Java中的设计模式:从入门到精通
|
7月前
|
设计模式 安全 Java
多线程设计模式【线程安全、 Future 设计模式、Master-Worker 设计模式 】(一)-全面详解(学习总结---从入门到深化)
多线程设计模式【线程安全、 Future 设计模式、Master-Worker 设计模式 】(一)-全面详解(学习总结---从入门到深化)
87 0
|
设计模式 算法 Java
JAVA设计模式--从入门到精通(下)
JAVA设计模式--从入门到精通
|
设计模式 Java 测试技术
JAVA设计模式--从入门到精通(上)
JAVA设计模式--从入门到精通