java设计模式之工厂模式
来源:互联网 发布:局域网电话软件 编辑:程序博客网 时间:2024/06/05 06:07
提到工厂模式,就不得不提关于软件开发的设计原则,这里我们先只讲其中的两个设计原则。
一、开闭原则:
开闭原则就是说对扩展开放,对修改关闭。在程序需要进行拓展的时候,不能去修改原有的代码,实现一个热插拔的效果。
二:迪米特法则:
迪米特法则也称为最少知道法则,就是说:一个实体应当尽量少的与其他实体之间发生相互作用,使得系统功能模块相对独立。
工厂模式主要分为两种:一种是简单工厂模式,一种是工厂方法模式。
先来做简单工厂模式:业务场景,有一家工厂,他现在在生产两种电脑,一种是宏基,另一种是联想,具体的实现代码如下:
第一步:定义一个电脑的接口,提供一个获取电脑名字的方法
package com.zzit.simplefactory;/** * 电脑接口,各种品牌的电脑都需要实现该接口 * @author yufu * */public interface Computer { void getBranch();}
第二步:分别定义宏基和联想的这两种电脑类,并实现电脑接口
package com.zzit.simplefactory;/** * 宏基电脑 * @author yufu * */public class Acer implements Computer { @Override public void getBranch() { System.out.println("生产宏基电脑"); }}
package com.zzit.simplefactory;/** * 联想电脑 * @author yufu * */public class Lenovo implements Computer{ @Override public void getBranch() { System.out.println("生产联想电脑"); }}
第三步:new电脑工厂
package com.zzit.simplefactory;/** * 生产电脑的工厂,根据传入类型的不同,生产处不同品牌的电脑 * @author yufu * */public class ComputerFactory { public Computer produce(String type) { if ("lenovo".equals(type)) { return new Lenovo(); } else if ("acer".equals(type)) { return new Acer(); } else { System.out.println("请输出正确的类型"); } return null; }}
测试代码:
package com.zzit.simplefactory;public class Test { public static void main(String[] args) { ComputerFactory cf = new ComputerFactory(); Computer c = cf.produce("acer"); c.getBranch(); }}
实际上,简单工厂模式除了根据传入名称不同来获取不同电脑品牌的方法外,还可以定义多个方法,返回不同品牌的电脑,实现代码如下:
package com.zzit.simplefactory2;/** * 生产电脑的工厂,根据传入类型的不同,生产处不同品牌的电脑 * @author yufu * */public class ComputerFactory { public Acer produceAcer() { return new Acer(); } public Lenovo produceLenovo(){ return new Lenovo(); }}
测试代码如下:
package com.zzit.simplefactory2;public class Test { public static void main(String[] args) { ComputerFactory cf = new ComputerFactory(); Acer acer=cf.produceAcer(); acer.getBranch(); }}
简单工厂模式虽然简单,但是它违背了软件开发的原则,如果要生产别的品牌的电脑,则需要修改工厂类的源代码来实现。
工厂方法模式:
工厂方法模式和简单工厂模式有类似的地方,但是它是每一个类对应一个工厂,这样如果要生产新的品牌电脑,直接建工厂就行了,不需要修改原来的工厂类。
第一步:抽象出电脑品牌类的接口
package com.zzit.factorymethod;/** * 电脑接口,各种品牌的电脑都需要实现该接口 * @author yufu * */public interface Computer { void getBranch();}
第二步:针对Computer接口建不同的实现类:
package com.zzit.factorymethod;/** * 宏基电脑 * @author yufu * */public class Acer implements Computer { @Override public void getBranch() { System.out.println("生产宏基电脑"); }}
package com.zzit.factorymethod;/** * 联想电脑 * * @author yufu * */public class Lenovo implements Computer { @Override public void getBranch() { System.out.println("生产联想电脑"); }}
第三步:针对每一个实现类建不同的工厂类。
package com.zzit.factorymethod;public class AcerFactory { public static Acer produceAcer(){ return new Acer(); }}
package com.zzit.factorymethod;public class LenovoFactory { public static Lenovo produceLenovo(){ return new Lenovo(); }}
测试代码如下:
package com.zzit.factorymethod;public class Test { public static void main(String[] args) { Computer c=LenovoFactory.produceLenovo(); c.getBranch(); }}
工厂方法模式虽然符合了软件开发的设计原则,但是无形中也增加了很多类,时间开发中我们要根据自己项目的实践情况,合理选择适合自己的设计模式。
阅读全文
0 0
- Java设计模式之工厂设计模式
- [java]设计模式之工厂设计模式
- Java设计模式之工厂设计模式
- Java设计模式之工厂设计模式
- JAVA设计模式之工厂设计模式
- java设计模式之工厂设计模式
- Java设计模式之工厂设计模式
- 《java设计模式》之工厂设计模式
- JAVA设计模式之工厂模式之简单工厂模式
- JAVA设计模式之工厂模式之工厂方法模式
- JAVA设计模式之工厂模式之抽象工厂模式
- Java设计模式之工厂
- JAVA设计模式之工厂模式(简单工厂模式+工厂方法模式+抽象工厂模式)
- JAVA设计模式之工厂模式(简单工厂模式+工厂方法模式+抽象工厂模式)
- JAVA设计模式之工厂模式(简单工厂模式+工厂方法模式+抽象工厂模式)
- JAVA设计模式之工厂模式(简单工厂模式+工厂方法模式+抽象工厂模式)
- JAVA设计模式之工厂模式(简单工厂模式+工厂方法模式+抽象工厂模式)
- java设计模式之工厂模式(简单工厂模式+工厂方法模式+抽象工厂模式)
- Python 文档阅读02
- 剑指offer(六)旋转数组的最小数字
- BZOJ3589动态树,BIT+容斥
- XML数据格式
- rxjs简单入门
- java设计模式之工厂模式
- Servlet实现日志管理
- PX4代码学习系列博客(5)——在px4中添加自己的模块
- unity3d 建立3D中文立体字
- markdown学习笔记
- 深度学习各种常见的Net
- linux:使用shell读写MySQL数据库
- 机器学习原来如此有趣!全世界最简单的机器学习入门指南
- HTTP协议