这篇文章主要介绍“Java工厂模式是什么意思”,在日常操作中,相信很多人在Java工厂模式是什么意思问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java工厂模式是什么意思”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!
工厂模式:
设计模式是源于生活,人类社会生产从原始的集体生产、私有化、作坊、手工工厂、流水线工程一路发展过来,工厂生产模式成为效率最高的方式。
那么在软件设计中也参考了这种方式:
工厂模式是我们最常用的实例化对象模式了,是用工厂方法代替new操作的一种模式。著名的Jive论坛 ,就大量使用了工厂模式,工厂模式在Java程序系统可以说是随处可见。因为工厂模式就相当于创建实例对象的new,我们经常要根据类Class生成实例对象,如A a=new A() 工厂模式也是用来创建实例对象的,所以以后new时就要多个心眼,是否可以考虑使用工厂模式,虽然这样做,可能多做一些工作,但会给你系统带来更大的可扩展性和尽量少的修改量。 工厂模式让对象的使用者无需了解具体实现,只需要通过对象工厂直接拿过来用就行了。
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的对象工厂远远没有这么简单。
工厂方法模式:
在简单工厂模式中,由于工厂类集中了所有实例的创建逻辑,违反了高内聚责任分配原则,将全部创建逻辑集中到了一个工厂类中;它所能创建的类只能是事先考虑到的,如果需要添加新的类,则就需要改变工厂类了。
很显然,工厂也应该抽象化,再去实现具体品牌的对象工厂,这样就可以在工厂实现类丰富更多的参数和功能。分工更细,可维修性也更高。
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相应的对象工厂,程序的复杂度依然存在。
创建抽象工厂,有公共属性和抽象方法。
实现类中实现冰露、农夫、怡宝的生产工厂。
这样既解决的代码的复杂性,又可以在工厂实现类中设置不同的参数。
/**
* 抽象工厂
* @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工厂模式是什么意思”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注亿速云网站,小编会继续努力为大家带来更多实用的文章!
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。
原文链接:https://my.oschina.net/u/4162404/blog/3073540