Java工厂模式是什么意思

发布时间:2021-07-06 10:44:39 作者:chen
来源:亿速云 阅读:185

这篇文章主要介绍“Java工厂模式是什么意思”,在日常操作中,相信很多人在Java工厂模式是什么意思问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java工厂模式是什么意思”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

工厂模式:

设计模式是源于生活,人类社会生产从原始的集体生产、私有化、作坊、手工工厂、流水线工程一路发展过来,工厂生产模式成为效率最高的方式。

那么在软件设计中也参考了这种方式:

工厂模式是我们最常用的实例化对象模式了,是用工厂方法代替new操作的一种模式。著名的Jive论坛 ,就大量使用了工厂模式,工厂模式在Java程序系统可以说是随处可见。因为工厂模式就相当于创建实例对象的new,我们经常要根据类Class生成实例对象,如A a=new A() 工厂模式也是用来创建实例对象的,所以以后new时就要多个心眼,是否可以考虑使用工厂模式,虽然这样做,可能多做一些工作,但会给你系统带来更大的可扩展性和尽量少的修改量。 工厂模式让对象的使用者无需了解具体实现,只需要通过对象工厂直接拿过来用就行了。

Java构架师学习资料:Java构架师技术栈/高并发/高可用/高性能/源码解析

简单工厂模式:

Java工厂模式是什么意思

简单工厂模式是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式,但不属于23种设计模式之一。简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。简单工厂模式是工厂模式家族中最简单实用的模式,可以理解为是不同工厂模式的一个特殊实现。

工厂(WaterFactory)角色:

简单工厂模式的核心,它负责实现创建所有实例的内部逻辑。工厂类的创建产品类的方法可以被外界直接调用,创建所需的产品对象。

抽象产品(Water)角色:

简单工厂模式所创建的所有对象的父类,它负责描述所有实例所共有的公共接口。

具体产品(冰露、农夫山泉、怡宝)角色:

是简单工厂模式的创建目标,所有创建的对象都是充当这个角色的某个具体类的实例。

优点:

工厂类是整个模式的关键.包含了必要的逻辑判断,根据外界给定的信息,决定究竟应该创建哪个具体类的对象.通过使用工厂类,外界可以从直接创建具体产品对象的尴尬局面摆脱出来,仅仅需要负责“消费”对象就可以了。而不必管这些对象究竟如何创建及如何组织的.明确了各自的职责和权利,有利于整个软件体系结构的优化。

缺点:

由于工厂类集中了所有实例的创建逻辑,违反了高内聚责任分配原则,将全部创建逻辑集中到了一个工厂类中;它所能创建的类只能是事先考虑到的,如果需要添加新的类,则就需要改变工厂类了。

简单工厂模式代码示例:

package demo;

/**

 * 饮用水抽象产品角色

 * @author OuYang

 *

 */

public interface Water {

       /**

        * 获取一个产品

        * @return

        */

       public String getWater();

      

}



------------------------------------



package demo;

/**

 * 冰露实现类

 * @author OuYang

 *

 */

public class IceDew implements Water{



       public String getWater() {

             

              return "冰露纯净水";

             

       }

      

}



--------------------------------------

package demo;

/**

 * 怡宝实现类

 * @author OuYang

 *

 */

public class SimpleFactory_Water {

       public Water getWater(String brand) {

              if(brand.equals("冰露")) {

                     return new IceDew();

              }

              if(brand.equals("农夫山泉")) {

                     return new NongFu();

              }

              if(brand.equals("怡宝")) {

                     return new YiBao();

              }

              return null;

       }

}



--------------------------------------------

package simplefactory_demo;



import demo.IceDew;

import demo.SimpleFactory_Water;



public class TestWater {

       public static void main(String[] args) {

             

              //普通new模式

              System.out.println(new IceDew().getWater());

             

              //简单的工厂生产模式(小作坊)

              //用户本身不再需要了解生产过程,只需要结果

              SimpleFactory_Water factory = new SimpleFactory_Water();

              System.out.println(factory.getWater("农夫山泉").getWater());

       }

}

在Spring中,beanFactory就是对象工厂,配置<bean .........> 就相当于代码:

factory.getWater("农夫山泉")

当然,Spring的对象工厂远远没有这么简单。

工厂方法模式:

在简单工厂模式中,由于工厂类集中了所有实例的创建逻辑,违反了高内聚责任分配原则,将全部创建逻辑集中到了一个工厂类中;它所能创建的类只能是事先考虑到的,如果需要添加新的类,则就需要改变工厂类了。

很显然,工厂也应该抽象化,再去实现具体品牌的对象工厂,这样就可以在工厂实现类丰富更多的参数和功能。分工更细,可维修性也更高。

Java工厂模式是什么意思

import SimpleFactory.Water;



/**

 * 工厂模型

 * @author OuYang

 *

 */

public interface Factory {

       //工厂的产品出口

       Water getWater();

}



--------------------------------------------

package methodfactory;

import SimpleFactory.NongFu;

import SimpleFactory.Water;

/**

 * 农夫山泉生产工厂

 * @author OuYang

 *

 */

public class NongFuFactory implements Factory{



       public Water getWater() {

             

              return new NongFu();

       }



}

--------------------------------------------

package methodfactory;

package abstractfactory;



import SimpleFactory.IceDew;

import SimpleFactory.NongFu;

import SimpleFactory.YiBao;

/**

 * 测试类

 * @author OuYang

 *

 */

public class FactoryTest {

       public static void main(String[] args) {

              System.out.println(new YiBaoFactory().getWater().getWater());

       }

}

抽象工厂模式:

在工厂方法模式中,我们无需new各种各样的对象来使用,只需要new一个对象工厂即可获得我们想要的对象。

但是这样只是解决了功能聚集在同一个工厂的问题,解决了改需求带来的麻烦,但是我们仍然要new相应的对象工厂,程序的复杂度依然存在。

Java工厂模式是什么意思

/**

 * 抽象工厂

 * @author OuYang

 *

 */

public abstract class AbstractFactory  {

      

       //公共属性和逻辑,容量

       int volume;

      

       //获取怡宝

       public abstract YiBao getYiBao();

       //获得冰露

       public abstract IceDew getIecDew();

       //获得农夫山泉

       public abstract NongFu getNongFu();

             

}



-------------------------------

package abstractfactory;



import SimpleFactory.IceDew;

import SimpleFactory.NongFu;

import SimpleFactory.YiBao;



/**

 * 抽象工厂实现类

 * @author OuYang

 *

 */

public class WaterFactory extends AbstractFactory{

       @Override

       public YiBao getYiBao() {

              //设置为1升

              this.volume=1;

              return new YiBao();

       }



       @Override

       public IceDew getIecDew() {

              //设置为2升

              return new IceDew();

       }



       @Override

       public NongFu getNongFu() {

              //设置为3升

              return new NongFu();

       }



}

------------------------------------

package simplefactory_demo;



import abstractfactory.WaterFactory;

/**

*测试类

*/

public class AbstractFactoryTest {

       public static void main(String[] args) {

             

              WaterFactory factory = new WaterFactory();

              System.out.println(factory.getIecDew().getWater());

到此,关于“Java工厂模式是什么意思”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注亿速云网站,小编会继续努力为大家带来更多实用的文章!

推荐阅读:
  1. Java链表是什么意思
  2. C#工厂模式是什么意思

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

java

上一篇:Spring Boot/VUE中如何实现路由传递参数

下一篇:SpringMVC文件上传的方法

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》