轻松掌握Java工厂模式、抽象工厂模式
程序员文章站
2024-03-12 13:57:08
在面向对象编程的程序设计中,我们最常见的操作就是new对象,但在创建一个新对象的过程中,会有一些问题,比如我们需要注意创建新对象的实现细节,初始化一些必要的参数等。这样会让...
在面向对象编程的程序设计中,我们最常见的操作就是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、抽象工厂模式:抽象工厂模式和工厂模式是不同,抽象工厂模式是对产品分等级,但工厂模式是对产品分类,举个汽车的例子:工厂模式是生产不同品种的汽车,比如奥迪和大众,而抽象工厂模式则是对同一款汽车进行等级划分,比如同样都是大众汽车,我们分了高端车和低端车。从方法上讲抽象工厂模式更像是工厂模式的细化。一个针对的不不同产品,一个针对的是同一个产品家族。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。