网易首页 > 网易号 > 正文 申请入驻

Java设计模式之工厂模式

0
分享至

工厂模式

工厂模式定义:**任何可以产生对象的方法或类,都可以称之为工厂。**所以单例也是一种工厂。

工厂模式把原来new对象的方式,换成了用工厂来实现。为什么有了new之后,还要有工厂?是为了灵活控制生产过程,还可以控制对象访问权限,给对象添加修饰和日志等。

工厂系列的设计模式有:

  • 简单工厂
  • 静态工厂
  • 工厂方法
  • 抽象工厂

举例:用面向对象多态的方式,实现任意定制交通工具。

public interface Moveable { void go();}public class Plane implement Moveable { public void go() { System.out.println("plane flying shuashua....."); }}public class Car implement Moveable { public void go() { System.out.println("Car go wuwuwuwuwu....."); }}public class Broom implement Moveable { public void go() { System.out.println("Broom flying chuachua....."); }}public class Main { public static void main(String[] args) { Moveable m = new Plane(); m.go(); }}

以上小程序中,plane、car、broom都实现了Moveable接口,当我想换一种工具,只要换一个对象就好了,不需要重新new对象了。

简单工厂

当我们new一个交通工具的时候,如果有控制权限的要求,而每个对象的权限是不一样的。飞机有飞机的权限,汽车有汽车的权限。这时候用简单的面向对象的方式就不合适了。这时候就要用工厂,让产生对象的过程不用new,交给工厂处理。因为工厂可以灵活的控制生产过程,定制权限、修饰、日志。

举例:简单工厂

//交通工具工厂public class SimpleVehicleFactory { public Car createCar() { //before processing 前置处理 return new Car(); } public Broom createBroom() { //before processing 前置处理 return new Broom(); } public Plane createPlane() { //before processing 前置处理 return new Plane(); }}

简单工厂的可扩展性不好,每当我们添加一种交通工具,都要重新写一个方法,方法里面的东西都要重写。

工厂方法

我们可以针对每一种产品来做一个工厂。这种方法叫工厂方法。

举例:工厂方法,实现任意定制生产过程。

public class CarFactory { public Car create() { System.out.println("a car created!"); return new Car(); }}public class Main { public static void main(String[] args) { Moveable m = new CarFactory().create(); m.go(); }}

针对汽车,做一个汽车工厂,在里面添加new汽车的方法,以及new汽车的权限和日志等。当需要汽车时,只需要调用工厂的方法。当有很多种交通工具,每种交通工具都做一个工厂。

抽象工厂

上面介绍了用工厂模式任意定制交通工具和任意定制生产过程,工厂模式还可以任意定制产品一族。

汽车、AK47、wdm(味多美) 是一个族: 现代族

public class Car { public void go() { System.out.println("Car go wuwuwuwuwu....."); }}public class AK47 { public void shoot() { System.out.println("tutututu....."); }}public class Bread { public void printName() { System.out.println("wdm"); }}public static void main(String[] args) { Car c = new Car(); c.go(); AK47 w = new AK47(); w.shoot(); Bread b = new Bread(); b.printName();}

笤帚、魔法棒、dmg(毒蘑菇)是一族: 魔法族

public class Broom { public void go() { System.out.println("Broom flying chuachua....."); }}public class MagicStick { public void shoot() { System.out.println("diandain....."); }}public class MushRoom { public void printName() { System.out.println("dmg"); }}public static void main(String[] args) { Broom b = new Broom(); b.go(); MagicStick m = new MagicStick(); m.shoot(); MushRoom r = new MushRoom(); r.printName();}

现在我们已经定义好了两个产品族,现代族和魔法族。但是每当我想换一个族,都要改很多代码。如果我想再添加一个产品族的时候,不需要添加很多代码,也不要修改很多地方。这是要用到抽象工厂。

举例:抽象工厂,实现任意定制产品一族

//抽象工厂public abstract class AbstracFactory { //这个抽象的工厂,会生产3个抽象的产品 abstract Food createFood(); abstract Vehicle createVehicle(); abstract Weapon createWeapon();}public abstract class Food { abstract void printName();}public abstract class Weapon { abstract void shoot();}public abstract class Vehicle { abstract void go();}//现代工厂,继承抽象工厂,生产现代族的产品public class ModernFactory extends AbstractFactory { @Override Food createFood() { return new Bread(); } @Override Food createVehicle() { return new Car(); } @Override Food createWeapon() { return new AK47(); }}//魔法工厂,继承抽象工厂,生产魔法族的产品 public class MagicFactory extends AbstractFactory { @Override Food createFood() {return new MushRoom(); } @Override Food createVehicle() {return new Broom(); } @Override Food createWeapon() {return new MagicStick(); }}public static void main(String[] args) { AbstractFactory f = new ModernFactory(); Vehicle c = f.createVehicle(); c.go(); Weapon w = f.createWeapon(); w.shoot(); Food b = f.createFood(); b.printName();}

另外汽车和笤帚继承Vehicle,AK47和魔法棒继承Weapon,wdm和dmg继承Food。代码简单就我不写了。

抽象工厂的结构是:

抽象工厂(AbstracFactory)可以生产Vehicle、Weapon、Food这三个抽象的东西。

具体工厂 继承抽象工厂(AbstracFactory),具体工厂生产具体的东西,汽车、AK47等,这些东西都是从抽象工厂生产的抽象的东西继承。

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
官宣!足协征集18强主场,需有VAR条件,多地响应,5大城市人气高

官宣!足协征集18强主场,需有VAR条件,多地响应,5大城市人气高

小金体坛大视野
2024-06-14 11:32:03
还没入伏就已经被热服了!全国510个站点出现40℃酷暑高温

还没入伏就已经被热服了!全国510个站点出现40℃酷暑高温

上游新闻
2024-06-14 11:01:12
王室公开重量级照片:威廉带着三个孩子正式出镜

王室公开重量级照片:威廉带着三个孩子正式出镜

金牌娱乐
2024-06-13 12:23:05
当叶童同框赵雅芝,终于见识了自然老与“医美老”的差距有多大了

当叶童同框赵雅芝,终于见识了自然老与“医美老”的差距有多大了

时髦范
2024-06-13 09:08:52
国际排联公布最新数据,刁琳宇排名第一,中国女排二传碾压对手

国际排联公布最新数据,刁琳宇排名第一,中国女排二传碾压对手

极度说球
2024-06-14 00:20:33
付费保席位!德媒:周冠宇已向哈斯车队报价3000-3500万欧赞助费

付费保席位!德媒:周冠宇已向哈斯车队报价3000-3500万欧赞助费

直播吧
2024-06-13 22:58:13
苹果iOS18.0太火爆了,修复续航和信号,这些机型可以直接升级

苹果iOS18.0太火爆了,修复续航和信号,这些机型可以直接升级

花生评测
2024-06-13 22:46:59
具俊晔情绪失控当场发飙,菲律宾演出现场寒酸,6个大灯24把椅子

具俊晔情绪失控当场发飙,菲律宾演出现场寒酸,6个大灯24把椅子

郑丁嘉话
2024-06-13 14:15:56
无视中方警告!仙宾礁发生“激战”,中艇反复撞击菲艇,出动直8

无视中方警告!仙宾礁发生“激战”,中艇反复撞击菲艇,出动直8

兰子记
2024-06-09 16:19:01
【郭沫若】“一黑黑俩”:抹黑他,也抹黑他极力“逢迎”的毛先生

【郭沫若】“一黑黑俩”:抹黑他,也抹黑他极力“逢迎”的毛先生

年之父
2024-06-12 06:10:02
凯特全身插满管子的高清照片流出!不露面是因为行动不便,起不来

凯特全身插满管子的高清照片流出!不露面是因为行动不便,起不来

亦纯杂谈
2024-06-13 10:58:45
闹大了!江苏河道水位下降,密密麻麻的地笼露出水面,评论区炸锅

闹大了!江苏河道水位下降,密密麻麻的地笼露出水面,评论区炸锅

椰青美食分享
2024-06-14 02:42:18
硬碰硬!3艘055大驱开赴南海,迎战2艘美国航母,规模史无前例

硬碰硬!3艘055大驱开赴南海,迎战2艘美国航母,规模史无前例

鹅毛的大雪
2024-06-14 08:52:14
F-16登场,留给侵略者耀武扬威的时间不多喽

F-16登场,留给侵略者耀武扬威的时间不多喽

临墨有余
2024-06-13 09:06:39
在美国,当犹太人遇上黑人谁怕谁呢,结局很有酸爽

在美国,当犹太人遇上黑人谁怕谁呢,结局很有酸爽

低调看天下
2024-06-13 12:36:39
内蒙古“公安厅长”落马!贪财好色,包养13岁女孩,为省“赔偿金”竟将其杀害

内蒙古“公安厅长”落马!贪财好色,包养13岁女孩,为省“赔偿金”竟将其杀害

天闻地知
2024-06-14 11:11:52
黄一鸣再度爆料,彻底断了转正的后路!王思聪在日本也有了新女友

黄一鸣再度爆料,彻底断了转正的后路!王思聪在日本也有了新女友

金牌娱乐
2024-06-12 12:12:34
今年高考很反常?全国一片静悄悄,原因有三

今年高考很反常?全国一片静悄悄,原因有三

林小溪一隅
2024-06-11 17:05:12
王祖蓝香港街头开五菱晴空!网友:有钱还那么低调,开几万块的车

王祖蓝香港街头开五菱晴空!网友:有钱还那么低调,开几万块的车

娱小小新
2024-06-14 11:50:32
2000吨铜“不翼而飞”?刚刚,紧急回应

2000吨铜“不翼而飞”?刚刚,紧急回应

中国基金报
2024-06-14 10:08:46
2024-06-14 14:52:49
数据人生
数据人生
人生苦短 我学Java
169文章数 2152关注度
往期回顾 全部

科技要闻

马斯克重获信任 豪言特斯拉市值超10个苹果

头条要闻

环球:美国欲警告"援俄"的中国小银行 与欧洲分歧明显

头条要闻

环球:美国欲警告"援俄"的中国小银行 与欧洲分歧明显

体育要闻

我们为什么还爱欧洲杯?

娱乐要闻

江宏杰秀儿女刺青,不怕刺激福原爱?

财经要闻

私募大佬孙强:中国为什么缺少耐心资本

汽车要闻

提供100/240kW双电机版本车型 乐道L60实车曝光

态度原创

房产
旅游
艺术
教育
健康

房产要闻

112亿!中建智地+朝开+江苏绿建摘北京首宗多业态地块

旅游要闻

中国女游客在泰国遭假冒司机性侵 嫌疑人竟是惯犯

艺术要闻

穿越时空的艺术:《马可·波罗》AI沉浸影片探索人类文明

教育要闻

希望杯初中数学,换元+解方程,解法很有启发

晚餐不吃or吃七分饱,哪种更减肥?

无障碍浏览 进入关怀版