JAVA工厂方法模式(Factory Method)
1.普通工厂模式
普通工厂模式:就是建立一个工厂类,对实现了同一接口的一些类进行实例的创建。
1-1.建立Sender接口
public interface Sender {
public void send();
}
1-2 创建实现类实现Sender接口,比如文本与图像以及视频类
文本类
public class TextSender implements Sender {
public void send() {
System.out.println("this is Textsender!");
}
}
图像类
public class ImageSender implements Sender {
public void send() {
System.out.println("this is Imagessender!");
}
}
视频类
public class VideoSender implements Sender {
public void send() {
System.out.println("this is Imagessender!");
}
}
1-3建立工厂类
public class SendFactory {
public Sender produce(String type) {
if ("mail".equals(type)) {
return new TextSender();
}
else if ("sms".equals(type)) {
return new ImageSender();
}
else if ("video".equals(type)) {
return new VideoSender();
}
else {
System.out.println("请输入正确的类型!");
return null;
}
}
}
1-4 普通的工厂模式设计已经完成了。下面在main中测试下
public class Main {
public static void main(String[] args) {
SendFactory factory = new SendFactory();
Sender text=factory.produce("text");
text.send();
Sender image=factory.produce("image");
image.send();
Sender video=factory.produce("video");
video.send();
}
}
测试结果截图:

但是这种普通工厂方式一旦参数不正确不会产生对象。为了改进这个方式便有了多工厂方法,一个方法产生对应的一个对象,通过调用方法来产生对象
2-1多工厂模式
只要改变1-3中的工厂类即可。
public class SendFactory {
public static Sender produceText(){
return new TextSender();
}
public static Sender produceImage(){
return new ImageSender();
}
public static Sender produceVideo(){
return new VideoSender();
}
}
在main中测试
2-2
public class Main {
public static void main(String[] args) {
SendFactory factory = new SendFactory();
Sender text = factory.produceText();
text.send();
Sender image = factory.produceImage();
image.send();
Sender video = factory.produceVideo();
video.send();
}
}
测试结果如下图

3。上面例子要是有新的类产生要去更改工厂类,不利于维护,对于这样的情况我们可以采用抽象工厂模式。
还是用上面的作为例子。
3-1.建立Sender接口
public interface Sender {
public void send();
}
3-2 创建实现类实现Sender接口,比如文本与图像以及视频类
文本类
public class TextSender implements Sender {
public void send() {
System.out.println("this is Textsender!");
}
}
图像类
public class ImageSender implements Sender {
public void send() {
System.out.println("this is Imagessender!");
}
}
视频类
public class VideoSender implements Sender {
public void send() {
System.out.println("this is Imagessender!");
}
}
3-3提供一个接口让工厂类来实现这边我用offer接口
public interface Offer {
public Sender offer();
}
3-4 对应类由对应工厂来生产
public class TextSenderFactory implements Offer {
public Sender offer() {
return new TextSender();
}
}
public class ImageSenderFactory implements Offer {
public Sender offer() {
return new ImageSender();
}
}
public class VideoSenderFactory implements Offer {
public Sender offer() {
return new VideoSender() ;
}
}
3-5.已经完成了去main中测试下
public class Main {
public static void main(String[] args) {
Offer textoffer=new TextSenderFactory();
Sender text=textoffer.offer();
text.send();
Offer imageoffer=new ImageSenderFactory();
Sender image=imageoffer.offer();
image.send();
}
}
测试结果:

JAVA工厂方法模式(Factory Method)的更多相关文章
- 工厂方法模式-Factory Method(Java实现)
工厂方法模式-Factory Method 工厂方法模式定义一个用于创建对象的接口,让子类决定实例化哪一个类.工厂方法让实例化的具体内容交给子类工厂来进行. 本文中的例子是这样的. 生产一个身份证, ...
- 乐在其中设计模式(C#) - 工厂方法模式(Factory Method Pattern)
原文:乐在其中设计模式(C#) - 工厂方法模式(Factory Method Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 工厂方法模式(Factory Method Pa ...
- 【设计模式】工厂方法模式 Factory Method Pattern
在简单工厂模式中产品的创建统一在工厂类的静态工厂方法中创建,体现了面形对象的封装性,客户程序不需要知道产品产生的细节,也体现了面向对象的单一职责原则(SRP),这样在产品很少的情况下使用起来还是很方便 ...
- 二十四种设计模式:工厂方法模式(Factory Method Pattern)
工厂方法模式(Factory Method Pattern) 介绍定义一个用于创建对象的接口,让子类决定将哪一个类实例化.Factory Method使一个类的实例化延迟到其子类. 示例有SqlMes ...
- 设计模式-03工厂方法模式(Factory Method Pattern)
插曲.简单工厂模式(Simple Factory Pattern) 介绍工厂方法模式之前,先来做一个铺垫,了解一下简单工厂模式,它不属于 GoF 的 23 种经典设计模式,它的缺点是增加新产品时会违背 ...
- IOS设计模式浅析之工厂方法模式(Factory Method)
概述 在软件系统中,经常面临着“某个对象”的创建工作,由于需求的变化,这个对象的具体实现经常面临着剧烈的变化,但是它却拥有比较稳定的接口. 如何隔离出这个易变对象的变化,使得系统中“其它依赖该对象的对 ...
- 六个创建模式之工厂方法模式(Factory Method Pattern)
问题: 在使用简单工厂模式的时候,如果添加新的产品类,则必需修改工厂类,违反了开闭原则. 定义: 定义一个用于创建对象的接口,让子类决定具体实例化哪个产品类.此时工厂和产品都具有相同的继承结构,抽象产 ...
- 大话设计模式--工厂方法模式 Factory Method -- C++实现
1. 工厂方法模式 定义一个用于创建对象的接口, 让子类决定实例化哪一个类,工厂方法使一个类的实例化延迟到其子类. 和简单工厂模式相比: A: 简单工厂模式最大的优点在于工厂类中包含有必要的逻辑判断, ...
- 工厂方法模式(Factory Method Pattern)
工厂方法模式概述 工厂方法模式是为了弥补简单工厂模式的不足并且继承它的优点而延生出的一种设计模式,属于GoF中的一种.它能更好的符合开闭原则的要求. 定义:定义了一个用于创建对象的接口,但是让子类决定 ...
- [设计模式]工厂方法模式(Factory Method)
模式目的 定义一个用于创建对象的接口,让其子类来决定实例化哪个类. 工厂方法模式将类的实例化延迟到了子类中进行. 模式结构 组成部分 产品(Product) - 定义了产品功能的接口 具体产品(Con ...
随机推荐
- mysql中的SQL_CACHE(性能更优化)
mysql中的sql_cache是个容易忽视的地方,要 使用的话,必须先设置query_cache_size, 以及设置query_cache_type ,其中 query_cache_type 这个 ...
- Codeforces Gym101572 B.Best Relay Team (2017-2018 ACM-ICPC Nordic Collegiate Programming Contest (NCPC 2017))
2017-2018 ACM-ICPC Nordic Collegiate Programming Contest (NCPC 2017) 今日份的训练,题目难度4颗星,心态被打崩了,会的算法太少了,知 ...
- Linux终端颜色设置
http://blog.sina.com.cn/s/blog_65a8ab5d0101g6cf.html http://www.tuicool.com/articles/NRZfIj #PS1='${ ...
- 预防SQL注入笔记
SQL注入如何预防? 本文参考自owasp,重点是提供清晰,简单,可操作的指导,以防止应用程序中的SQL注入漏洞.不幸的是,SQL注入攻击很常见,这是由于两个因素: SQL注入漏洞的显着流行 目标的吸 ...
- 第四章——SQLServer2008-2012资源及性能监控(1)专家
http://blog.csdn.net/dba_huangzj/article/details/8614817
- VS2015中跑OpenGL红宝书第八版的示例代码
OpenGL的东西快忘光了,把角落的第八版红宝书拿出来复习一下 从书中的地址下了个示例代码结果新系统(Win10+VS2015)各种跑不起来,懊恼之后在网上疯狂搜索资料终于跑起来了,记录一下 一.环境 ...
- OpenGL step to step(2)
这是一个类似于地球绕太阳旋转的demo 原有的例子是用键盘接受事件,我做了修改,使用了timer把他变成一个动态旋转的 #import <Foundation/Foundation.h> ...
- dubbo常见问题解答FAQ
常见问题解答 1. 如果服务注册不上怎么办? 2. 出现RpcException: No provider available for remote service异常怎么办? 3. 出现调用超时co ...
- UNIX&Linux发展图谱
来自为知笔记(Wiz)
- Git以及github的使用方法(三),git status查看工作区的状态,git diff查看具体修改内容
我们已经成功地添加并提交了一个readme.txt文件,现在,是时候继续工作了,于是,我们继续修改readme.txt文件,改成如下内容: Git is a distributed version c ...