java模式-工厂模式
今天在学习工厂模式,从最简单的简单工厂模式开始。
我们现在需要通过工厂Factory生产A,B两款产品(都是产品,实现了接口Product)。
产品A:
public class A implements Product {
public A() {
System.err.println("生产了产品A");
}
}
产品B:
public class B implements Product {
public B() {
System.err.println("生产了产品B");
}
}
A,B实现的接口Product:
public interface Product {
}
接下来就是我们用来实例化A,B的工厂类:
public class Factory {
public Product create(int i) throws Exception {
switch (i) {
case 1:
return new A();
case 2:
return new B();
default:
throw new Exception("没有该产品。");
}
}
public static void main(String[] args) throws Exception {
Factory f=new Factory();
f.create(1);
f.create(2);
f.create(3);
}
}
简单工厂中只有一个工厂,这个工厂可以接收参数,并根据参数来决定返回什么样的实体。所有创建的工作都由该工厂完成。
简单工厂有一个不方便的地方在于,当我们需要需要新增一种产品,比如产品C,这时候我们不仅需要新建C的实体类,还需要修改工厂类的方法。如果需要生产的产品足够多,我们工厂类则会显得十分复杂,各种判断。
这时候我们就思考了,可不可以让一个工厂只生产一种产品呢,这样工厂类内部就简单了。
如下,我们先定义一个借口Product,所有可以生产产品的工厂类都要实现这个接口。
/**
* <p>
*
* 工厂类接口
* </p>
*
* @author wangchao
*
* @version 1.0.0
*
* @since 1.0.0
*
*/
public interface FactoryInterface {
//创建方法
public Product create();
}
实现了这个接口的工厂:
/**
* <p>
* 工厂A,专门负责生产A类产品
* </p>
*
* @author wangchao
*
* @version 1.0.0
*
* @since 1.0.0
*
*/
public class FactoryA implements FactoryInterface { @Override
public Product create() {return new A();
} }
/**
* <p>
* 工厂B,专门负责生产B类产品
* </p>
*
* @author wangchao
*
* @version 1.0.0
*
* @since 1.0.0
*
*/
public class FactoryB implements FactoryInterface { public Product create() {
return new B();
} }
这样的话,每一个工厂的实现就非常简单了。但是这样还是有一个问题,我们需要为为一个产品创建一个工厂,如果我们的产品足够多,我们就得创建足够的工厂,这样肯定不是我们想要的。
我们需要一个更加抽象的工厂,来实现有共同属性的产品的生产。
比如,现在我们现在对A产品要生产两个型号:A-1、A-2,B产品也需要生产两个型号:B-1、B-2。如果按照上面的工厂方法,我们需要写四个
java模式-工厂模式的更多相关文章
- !!转!!java 简单工厂模式
举两个例子以快速明白Java中的简单工厂模式: 女娲抟土造人话说:“天地开辟,未有人民,女娲抟土为人.”女娲需要用土造出一个个的人,但在女娲造出人之前,人的概念只存在于女娲的思想里面.女娲造人,这就是 ...
- 一张图搞定Java设计模式——工厂模式! 就问你要不要学!
小编今天分享的内容是Java设计模式之工厂模式. 收藏之前,务必点个赞,这对小编能否在头条继续给大家分享Java的知识很重要,谢谢!文末有投票,你想了解Java的哪一部分内容,请反馈给我. 获取学习资 ...
- Java基础——工厂模式
通过学习,一句话概括Java工厂模式的特点——通过建立一个工厂来创建对象,不必关心构造对象实例能不能被实例化啊等诸多细节和复杂过程. 工厂模式呢?就像我们从劳动密集型社会转型到技术密集型社会.打个比方 ...
- Java抽象工厂模式
Java抽象工厂模式 基本定义 抽象工厂模式是所有形态的工厂模式中最为抽象和最其一般性的.抽象工厂模式可以向客户端提供一个接口,使得客户端在不必指定产品的具体类型的情况下,能够创建多个产品族的产品对象 ...
- Java的工厂模式(一)
Java的工厂模式在框架中是用的到很多的,所谓的工厂模式,其实也就是用一个接口来创建对象,把实例化的工作推迟到子类去实现.这样在主函数中就可以直接创建一个工厂类,再通过这个工厂类实现操作. 假设有一个 ...
- Java简单工厂模式
Java简单工厂模式 在阎宏博士的<JAVA与模式>一书中开头是这样描述简单工厂模式的:简单工厂模式是类的创建模式,又叫做静态工厂方法(Static Factory Method)模式.简 ...
- Java 静态工厂模式的使用
多相关文章请参考:http://www.enjoytoday.cn/categorys/java 静态工厂模式给人的第一印象就是:static+abstract.这两个词汇已经说明了一切,一个是周期长 ...
- 【设计模式】Java设计模式 -工厂模式
[设计模式]Java设计模式 -工厂模式 不断学习才是王道 继续踏上学习之路,学之分享笔记 总有一天我也能像各位大佬一样 一个有梦有戏的人 @怒放吧德德 分享学习心得,欢迎指正,大家一起学习成长! 目 ...
- Java实现工厂模式
工厂模式(Factory),当需要根据运行时的一些条件来决定创建具体对象时,就应该考虑使用工厂设计模式,将创建对象的任务交给工厂集中处理. 工厂模式有多种写法,总体分为简单工厂模式和抽象工厂模式 工厂 ...
- SpringBoot使用策略模式+工厂模式
为了防止大量的if...else...或switch case代码的出现,可以使用策略模式+工厂模式进行优化. 在我的项目当中,报表繁多,所以尝试了这种方式进行优化报表的架构.代码很简单,如下: Fa ...
随机推荐
- CMake undefined reference to `QTcpServer::QTcpServer(QObject*)'的解决
1. 这是因为工程link不到network的库,因此除了要包含头文件 #include 之外,还需要在.pro文件中加入: QT += network 2. 对于CMake,需添加Net ...
- :active 为什么在ios上失效
:active是针对鼠标,而手机上是没有鼠标,而是touchstart,所以早成了ios上不兼容 解决方法是: window.onload = function(){ document.body.ad ...
- mac系统terminal连接linux
ssh user@hostname user是管理员账号 hostname是服务器ip
- IOS在线安装App
在越狱设备上可以安装,如果设备不越狱也想安装,就要企业发布权限了,可惜我没有,所以不能测试了! 1.创建ipa及plist文件: XCode菜单栏->Product->Archive-&g ...
- python爬虫
预:网页的组成 HTML(结构)+css(样式)+javascript(功能) 爬虫主要针对的是HTML和css HTML: <div></div>div标签 代表网页中某个区 ...
- Android隐藏状态栏、导航栏
Android隐藏状态栏.导航栏 private void hideStatusNavigationBar(){ if(Build.VERSION.SDK_INT<16){ this.getWi ...
- html5,video元素
<video src="1.mp4" controls="" width="500" height="300" ...
- Database cannot be started in this edition of SQL Server" error when restoring a Microsoft Dynamics CRM database
处理办法:http://support.microsoft.com/kb/2567984
- qt qml 九宫格划指锁屏视图
九宫格划指锁屏视图Lisence: MIT, 请保留本文档说明Author: surfsky.cnblogs.com 2015-02 [先看效果] [下载] http://download.csdn. ...
- android开发中难免遇到listview刷新数据出现异常
异常:java.lang.IllegalStateException: The content of the adapter has changed but ListView did not rece ...