给女友讲讲设计模式——工厂模式(JAVA实例)1

简介: 前言接触Java已经有很长的一段时间了,但是总是一味的去探索新的技术,学着不断的去堆砌代码,最后终于发现自己写的代码是没有灵魂的,有些时候只是单纯的实现了功能,但是代码的可读性和可维护性并不是那么好,所以开始慢慢的学习和接触设计模式。

前言

接触Java已经有很长的一段时间了,但是总是一味的去探索新的技术,学着不断的去堆砌代码,最后终于发现自己写的代码是没有灵魂的,有些时候只是单纯的实现了功能,但是代码的可读性和可维护性并不是那么好,所以开始慢慢的学习和接触设计模式。(PS:之所以叫给女友讲讲系列,是因为我想用最直白的语言,最易懂的例子,能够让其他人理解相应的模式。)

工厂模式

我们先来讲讲工厂模式,我们为什么需要工厂模式呢,我们创造出来的不同种类的类,虽然细节和具体方面存在着差异化,但是都是属于同一个母亲的孩子。熟悉Mybatis的肯定会知道DataSourceFactory这个类,这就是一个典型的工厂类,通过配置DataSourceFactory不同的参数,然后获得不同的DataSource。详细的内容可以看怕DataSourceFactory解析
于是我们就通过工厂类,根据不同的需求给出不同的实现,下面用的是一个“水果工厂”举得例子,给出代码:

package factory;

/**
 * 这是一个工厂模式的接口
 * @author luckyharry
 *
 */
public interface Fruit {
    public void eat();
}

定义了水果最基本的一个功能,就是可以被吃,这是所有水果都共有的功能。

package factory;

public class Apple implements Fruit {

    public Apple () {
        System.out.println("I am apple");
    }
    @Override
    public void eat() {
        System.out.println("Now, you can eat Apple");
    }

}

这里定义一个苹果类,实现了水果接口。

package factory;

public class Banana implements Fruit {

    public Banana() {
        System.out.println("I am Banana");
    }
    @Override
    public void eat() {
        System.out.println("now you can eat Banana");
    }

}

这里是一个香蕉类。

package factory;

public class Factory {
    private Factory() {
    }

    public static Fruit eatApple() {
        return new Apple();
    }

    public static Fruit eatBanana() {
        return new Banana();
    }
}

然后定义一个工厂类,我们也可以通过传入不同的参数,使用switch去进行判断到底实例化哪一个类。

package factory;

public class TestMain {
    public static void main(String[ ] args) {
        
        //如果我们想吃一个苹果
        Factory.eatApple().eat();
        
        //如果我们想吃一个香蕉
        Factory.eatBanana().eat();
    }
    
}

最后就是在具体的地方进行,具体的实现了。
工厂模式是对多态的一种很好的诠释。接口也是实现松耦合的重中之重,使得我们操纵接口,而不是直接对类开刀。
那么问题来了,工厂模式,给我们获得实例提供了统一性,但是存在这样一个问题,现在有苹果和香蕉两种水果,如果我们想要添加一个樱桃的类呢,我们就得需要在Factory类中添加一个新的方法,然后实例化并返回这个对象,这样打破了我们少修改原有的类,多做拓展的原则,一点都不优雅,那对于这样经常需要拓展的设计该怎么办呢,那就得用抽象工厂模式了。

抽象工厂模式

下面直接上代码,Apple.java和Banana.java和Fruit.java与工厂模式的代码相同这里就不贴出来了
然后我们把工厂进行抽象,所有的工厂都具有获得水果这样一个方法,所以抽象到接口中:

package abstractFactory;

public interface Factory {
    public Fruit getFruit();
}

下面是为苹果准备的工厂类。

package abstractFactory;

public class FactoryForApple implements Factory{

    @Override
    public Fruit getFruit() {
        return new Apple();
    }
    
}

下面是为香蕉准备的工厂类。

package abstractFactory;

public class FactoryForBanana implements Factory{

    @Override
    public Fruit getFruit() {
        return new Banana();
    }
    
}

package abstractFactory;

public class TestMain {
    public static void main(String args[]) {
        
        //抽象工厂模式获得苹果
        new FactoryForApple().getFruit();
        
        //抽象工厂模式获得香蕉
        new FactoryForBanana().getFruit();
    }
}

后记

我会一直以这样通俗易懂的自己能想到的例子,讲解设计模式,最大的启发是来源于《大话设计模式》。非常感觉这本书的作者程杰先生。

目录
相关文章
|
27天前
|
Java
通过Java代码解释成员变量(实例变量)和局部变量的区别
本文通过一个Java示例,详细解释了成员变量(实例变量)和局部变量的区别。成员变量属于类的一部分,每个对象有独立的副本;局部变量则在方法或代码块内部声明,作用范围仅限于此。示例代码展示了如何在类中声明和使用这两种变量。
|
28天前
|
设计模式 Java 程序员
[Java]23种设计模式
本文介绍了设计模式的概念及其七大原则,强调了设计模式在提高代码重用性、可读性、可扩展性和可靠性方面的作用。文章还简要概述了23种设计模式,并提供了进一步学习的资源链接。
44 0
[Java]23种设计模式
|
11天前
|
设计模式 JavaScript Java
Java设计模式:建造者模式详解
建造者模式是一种创建型设计模式,通过将复杂对象的构建过程与表示分离,使得相同的构建过程可以创建不同的表示。本文详细介绍了建造者模式的原理、背景、应用场景及实际Demo,帮助读者更好地理解和应用这一模式。
|
1月前
|
设计模式 监控 算法
Java设计模式梳理:行为型模式(策略,观察者等)
本文详细介绍了Java设计模式中的行为型模式,包括策略模式、观察者模式、责任链模式、模板方法模式和状态模式。通过具体示例代码,深入浅出地讲解了每种模式的应用场景与实现方式。例如,策略模式通过定义一系列算法让客户端在运行时选择所需算法;观察者模式则让多个观察者对象同时监听某一个主题对象,实现松耦合的消息传递机制。此外,还探讨了这些模式与实际开发中的联系,帮助读者更好地理解和应用设计模式,提升代码质量。
Java设计模式梳理:行为型模式(策略,观察者等)
|
1月前
|
设计模式 Java
Java设计模式
Java设计模式
29 0
|
1月前
|
Java
java的Random类和Arrays.sort类使用实例
java的Random类和Arrays.sort类使用实例
11 0
|
1月前
|
设计模式 Java
Java设计模式之外观模式
这篇文章详细解释了Java设计模式之外观模式的原理及其应用场景,并通过具体代码示例展示了如何通过外观模式简化子系统的使用。
29 0
|
1月前
|
设计模式 Java
Java设计模式之桥接模式
这篇文章介绍了Java设计模式中的桥接模式,包括桥接模式的目的、实现方式,并通过具体代码示例展示了如何分离抽象与实现,使得两者可以独立变化。
44 0
|
存储 Java 关系型数据库
20 个实例玩转 Java 8 Stream
20 个实例玩转 Java 8 Stream
278 0
20 个实例玩转 Java 8 Stream
|
存储 Java 关系型数据库
20 个实例玩转 Java 8 Stream,写的太好了!
先贴上几个案例,水平高超的同学可以挑战一下: 从员工集合中筛选出salary大于8000的员工,并放置到新的集合里。 统计员工的最高薪资、平均薪资、薪资之和。
20 个实例玩转 Java 8 Stream,写的太好了!

热门文章

最新文章

  • 1
    C++一分钟之-设计模式:工厂模式与抽象工厂
    43
  • 2
    《手把手教你》系列基础篇(九十四)-java+ selenium自动化测试-框架设计基础-POM设计模式实现-下篇(详解教程)
    50
  • 3
    C++一分钟之-C++中的设计模式:单例模式
    58
  • 4
    《手把手教你》系列基础篇(九十三)-java+ selenium自动化测试-框架设计基础-POM设计模式实现-上篇(详解教程)
    38
  • 5
    《手把手教你》系列基础篇(九十二)-java+ selenium自动化测试-框架设计基础-POM设计模式简介(详解教程)
    64
  • 6
    Java面试题:结合设计模式与并发工具包实现高效缓存;多线程与内存管理优化实践;并发框架与设计模式在复杂系统中的应用
    59
  • 7
    Java面试题:设计模式在并发编程中的创新应用,Java内存管理与多线程工具类的综合应用,Java并发工具包与并发框架的创新应用
    42
  • 8
    Java面试题:如何使用设计模式优化多线程环境下的资源管理?Java内存模型与并发工具类的协同工作,描述ForkJoinPool的工作机制,并解释其在并行计算中的优势。如何根据任务特性调整线程池参数
    50
  • 9
    Java面试题:请列举三种常用的设计模式,并分别给出在Java中的应用场景?请分析Java内存管理中的主要问题,并提出相应的优化策略?请简述Java多线程编程中的常见问题,并给出解决方案
    112
  • 10
    Java面试题:设计模式如单例模式、工厂模式、观察者模式等在多线程环境下线程安全问题,Java内存模型定义了线程如何与内存交互,包括原子性、可见性、有序性,并发框架提供了更高层次的并发任务处理能力
    78