时间:2021-05-19
在面向对象编程的程序设计中,我们最常见的操作就是new对象,但在创建一个新对象的过程中,会有一些问题,比如我们需要注意创建新对象的实现细节,初始化一些必要的参数等。这样会让我们在讲更多的心思放在对象的创建上,而不是程序逻辑的实现上,严重拖延了我们的程序开发效率。工厂模式和抽象工厂模式的出现则完美解决了这个问题,让我们不再关心对象的创建,更多的在重心放在业务的实现上。
特点:
1、程序员直接通过工厂方法创建对象,不再关注创建对象的细节。
2、隐藏对象的实现细节,也有利于程序的安全性。
3、降低程序耦合度。
企业级开发和常见框架中的应用:
Hibernate中的sessionfactory等
工厂模式分类:
简单工厂模式,程序开发中最常用的形式,具体代码如下:
public class Demo { /** * demo这个类就是我们平时的操作类,在这个类中我们不用去关心 创建汽车的实现细节 */ public static void main(String[] args) { Car car = CarFactory.createCar("dz"); car.run(); Car car2 = CarFactory.createCar("at"); car2.run(); }}interface Car{ public void run();}class Dz implements Car{ public void run() { System.out.println("大众汽车在跑"); }}class At implements Car{ public void run() { System.out.println("奥拓汽车在跑"); }}class CarFactory{ public static Car createCar(String type){ if("dz".equals(type)){ System.out.println("创建了一个大众车"); return new Dz(); } if("at".equals(type)){ System.out.println("创建了一个奥拓车"); return new At(); } return null; }}工厂方法模式,相比于简单工厂模式,方便扩展,不必去修改以前的代码
public class Demo { /** * demo这个类就是我们平时的操作类,在这个类中我们不用去关心 创建汽车的实现细节 */ public static void main(String[] args) { AtFactory atFactory = new AtFactory(); DzFactory dzFactory = new DzFactory(); Car at = atFactory.createCar(); Car dz = dzFactory.createCar(); at.run(); dz.run(); }}interface Car { public void run();}class Dz implements Car { public void run() { System.out.println("大众汽车在跑"); }}class At implements Car { public void run() { System.out.println("奥拓汽车在跑"); }}interface CarFactory { Car createCar();}class DzFactory implements CarFactory { public Car createCar() { return new Dz(); }}class AtFactory implements CarFactory { public Car createCar() { return new At(); }}抽象工厂方法模式:
public class Demo { public static void main(String[] args) { Car carFactory = new GDCarFactory(); FDZ fdz = carFactory.createFdz(); fdz.zhuansu(); }}interface FDZ { void zhuansu();}class GDFDZ implements FDZ { public void zhuansu() { System.out.println("高端发动机转速快"); }}class DDFDZ implements FDZ { public void zhuansu() { System.out.println("低端发动机转速慢"); }}interface ZY { void shushidu();}class GDZY implements ZY { public void shushidu() { System.out.println("高端座椅很舒适"); }}class DDZY implements ZY { public void shushidu() { System.out.println("低端座椅不舒适"); }}interface LT { void mosundu();}class GDLT implements LT { public void mosundu() { System.out.println("高端轮胎不磨损"); }}class DDLT implements LT { public void mosundu() { System.out.println("低端轮胎磨损快"); }}interface Car { FDZ createFdz(); ZY createZy(); LT createLt();}class GDCarFactory implements Car{ @Override public FDZ createFdz() { return new GDFDZ(); } @Override public ZY createZy() { return new GDZY(); } @Override public LT createLt() { return new GDLT(); } }class DDCarFactory implements Car{ @Override public FDZ createFdz() { return new DDFDZ(); } @Override public ZY createZy() { return new DDZY(); } @Override public LT createLt() { return new DDLT(); } }三种方法的比较:
1、简单工厂模式:简单工厂模式设计简单,代码量少,但是可扩展性却很差,需要扩展时需要修改以前的代码
2、工厂方法模式:扩展性强,但增加了代码复杂度
3、抽象工厂模式:抽象工厂模式和工厂模式是不同,抽象工厂模式是对产品分等级,但工厂模式是对产品分类,举个汽车的例子:工厂模式是生产不同品种的汽车,比如奥迪和大众,而抽象工厂模式则是对同一款汽车进行等级划分,比如同样都是大众汽车,我们分了高端车和低端车。从方法上讲抽象工厂模式更像是工厂模式的细化。一个针对的不不同产品,一个针对的是同一个产品家族。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
本文实例讲述了java设计模式之工厂模式。分享给大家供大家参考,具体如下:工厂模式(factory)涉及到4个角色:抽象工厂类角色,具体工厂类角色,抽象产品类角
上一篇说到了工厂模式,那么学习了工厂模式,抽象工厂也得学习一下。实际上,抽象工厂模式实际上就是在工厂模式的基础上再嵌套一层工厂模式而已,通过父工厂制造子工厂。只
前言在《设计模式》一书中工厂模式提到了:工厂方法模式(FactoryMethod)抽象工厂模式(AbstractFactory)但是在实际过程中还有一种工厂模式
定义:为创建一组相关或相互依赖的对象提供一个接口,而且无需指定他们的具体类。类型:创建类模式类图:抽象工厂模式与工厂方法模式的区别抽象工厂模式是工厂方法模式的升
定义:为创建一组相关或相互依赖的对象提供一个接口,而且无需指定他们的具体类。类型:创建类模式类图:抽象工厂模式与工厂方法模式的区别抽象工厂模式是工厂方法模式的升