您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息
免费发信息

java设计模式之工厂方法模式

2024/4/19 16:37:05发布7次查看
概要
设计模式是一门艺术,如果真正了解这门艺术,你会发现,世界都将变得更加优美。
定义
定义一个用于创建对象的接口,让其子类去决定实例化那个类
使用场景
任何使用复杂对象的地方,都可以使用工厂模式
uml
1.抽象工厂
抽象工厂:我们都知道,工厂,一般只有一个作用,那就生产,比如,吉利汽车厂,那就制造吉利汽车,iphone手机制造厂就造iphone等等
所以可以用一个简单的方法概括,就是create();
2.具体汽车制造厂
具体汽车制造厂:实现了抽象工厂,具有实际的制造汽车的流程和方法等
3.抽象汽车
抽象汽车:汽车我们一般都知道,能跑,能放音乐,能导航,能转弯这些都是汽车的共性
4.具体汽车
抽象汽车:具体汽车实现了抽象汽车,具备其所有的功能,当然不同的汽车可能具备的功能还不一样
上述简单的做了介绍,大体而言就是,具体汽车厂制造相应的的汽车,比如:奥迪的工厂,制造奥迪汽车,大众的工厂,制造大众的汽车等
代码演示
上面我们已经很清晰的明白了他们之间的关系,所以接下来就用代码演示,将上面我们的想法和逻辑用代码表现出来:
(1)抽象汽车工厂
package com.zengtao.demo.factory; /** * 抽象工厂 */ public abstract class carfactory { public abstract <t extends car> t createcar(class<t> cla); }
(2)具体汽车工厂
package com.zengtao.demo.factory; /** * 奥迪工厂 */ public class audifactory extends carfactory { @suppresswarnings("unchecked") @override public <t extends car> t createcar(class<t> cla) { car car = null; try { car = (car) class.forname(cla.getname()).newinstance(); } catch (exception e) { e.printstacktrace(); } return (t) car; } }
(3)定义抽象的车
package com.zengtao.demo.factory; public abstract class car { public abstract void drive(); public abstract void selfnagive(); public abstract void playmusic(); }
(4)具体的车
(奥迪q3)
package com.zengtao.demo.factory; public class audiq3car extends audicar { @override public void drive() { system.out.println("audiq3car 已经制造成功"); system.out.println("audiq3car drive"); } @override public void selfnagive() { system.out.println("audiq3car selfnagive"); } @override public void playmusic() { system.out.println("audiq3car playmusic"); system.out.println(""); } }
(奥迪q5)
package com.zengtao.demo.factory; public class audiq5car extends audicar { @override public void drive() { system.out.println("audiq5car 已经制造成功"); system.out.println("audiq5car drive"); } @override public void selfnagive() { system.out.println("audiq5car selfnagive"); } @override public void playmusic() { system.out.println("audiq5car playmusic"); system.out.println(""); } }
(5)调用
package com.zengtao.demo; import com.zengtao.demo.factory.audifactory; import com.zengtao.demo.factory.audiq3car; import com.zengtao.demo.factory.audiq5car; public class main { public static void main(string[] str) { // 创建工厂 audifactory audifactory = new audifactory(); // 利用工厂制造q3车 audiq3car audiq3car = audifactory.createcar(audiq3car.class); // 利用工厂制造q5车 audiq5car audiq5car = audifactory.createcar(audiq5car.class); // 开始开车放音乐 audiq3car.drive(); audiq3car.playmusic(); audiq5car.drive(); audiq5car.playmusic(); } }
(6)结果
以上呢,就里用工厂方法模式,实现了制造汽车的简单过程
第一点:
在抽象工厂中我们看到,createcar(class cla)方法,我们为什么这样定义呢,使用反射去的方式去创建具体的车,这样,我们不同类型的车,只需要相应的条件,是不是都能产出了,所以这样写是有好处的,就像很多,奥迪有q3,q5,a4,a6,a7,a8等系列一样
第二点:
如果我们有其它的车,比如宝马,也具有宝马x1,320,x5等,我们也可以很简单的实现,只需要实现抽象工厂,然后具体汽车实现抽象car就好了,扩展也非常方便
总结
抽象工厂到这里也就差不多了,工厂方法模式是一个比较简单也挺好的一种设计模式
但是也有缺点,比如:如果有新的其它类型汽车,只需要实现抽象工厂和抽象汽车,也就新建两个类
但是如果不是汽车,是手机,那么,就要全部都写一遍,这样就会造成,非常多的类出现,是否采用工厂方法模式,还是根据需求来决定。
注意:大家也不要为了设计而去套用设计模式,当然工厂方法模式平时也很常用,比如:activity的oncreate方法,我们也是根据自己定义的xml布局,加载生成相应的界面等等
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
更多java设计模式之工厂方法模式。
该用户其它信息

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录