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 ...
随机推荐
- C++ 回调函数的简单例子(转)
原文转自 http://blog.csdn.net/wnlwcg/article/details/6930990# 1.调用端 // 下面的这个_stdcall很重要的 void _stdcall T ...
- Windwos2008如何关闭IE增强的安全配置
如题 方法:
- AC日记——魔术球问题 洛谷 P2765
题目描述 «问题描述: 假设有n根柱子,现要按下述规则在这n根柱子中依次放入编号为1,2,3,...的球. (1)每次只能在某根柱子的最上面放球. (2)在同一根柱子中,任何2个相邻球的编号之和为完全 ...
- js-斐波那切数列
f(1) = 1; f(2) = 1; f(3) = f(1) + f(2) = 2; f(4) = f(3) + f(2) = 3; f(5) = f(4) + f(3) = 5; f(6) = f ...
- ArrayList和LinkedList学习
摘要 ArrayList和LinkedList是对List接口的不同数据结构的实现.它们都是线程不安全的,线程不安全往往出现在数组的扩容.数据添加的时候. 一.ArrayList和LinkedList ...
- Maven添加坐标(依赖)及在Eclipse中的操作
例如:添加一个spring-test.jar的依赖过程,普遍的做法就是直接操作pom.xml文件. 1.打开maven的中央仓库:http://search.maven.org/ 2.搜索仓库: 进入 ...
- tar命令中的-C作用
一直不知道解压命令如何指定文件夹,今天学到了一个 -C 参数 tar zxvf test.tar.gz -C test 注释:上面的命令将 test.tar.gz 这个压缩包解压到当前目录下的 tes ...
- iOS 改变Search Bar中Scope Button中文本的颜色和字体
- (void)initSearchbar{ self.wineSearchBar.delegate = self; [self.wineSearchBar setScopeBarButtonTitl ...
- 拦截器及 Spring MVC 整合
一.实验介绍 1.1 实验内容 本节课程主要利用 Spring MVC 框架实现拦截器以及 Spring MVC 框架的整合. 1.2 实验知识点 Spring MVC 框架 拦截器 1.3 实验环境 ...
- install nfs and share file
介绍一下NFS的安装,以及共享文件 NFS(Net File System),通过使用NFS,可以像使用本地文件一样访问远程文件. 它主要解决了数据共享的问题,可以备份容灾. 安装配置 1.以linu ...