java设计模式案例详解:工厂模式
1.简单工厂模式
在不考虑扩展的情况下还是很好用的,其实我们写代码也很经常用到,其主要理解在于传入不同参数则构建不同对象,只有一个工厂,如需添加产品涉及到扩展需要修改比较多的东西,不符合开闭原则,如下例子所示,传入A则获得ABook,传入B则获得BBook:
package main.java.com.learn.factory.factory;
public interface Book {
void getKnowledge();
}
package main.java.com.learn.factory.factory;
public class ABook implements Book{
@Override
public void getKnowledge() {
System.out.println("获得A知识");
}
}
package main.java.com.learn.factory.factory;
public class BBook implements Book{
@Override
public void getKnowledge() {
System.out.println("获得B知识");
}
}
package main.java.com.learn.factory.factory;
public class SimpleBookFactory {
public static Book create(String type) {
if ("A" == type)
return new ABook();
else
return new BBook();
}
}
package main.java.com.learn.factory.factory; /**
* Created by garfield on 2016/6/13.
*/
public class SimpleBookFactoryTest { public static void main(String[] args){
Book a = SimpleBookFactory.create("A");
Book b = SimpleBookFactory.create("B");
a.getKnowledge();
b.getKnowledge();
}
}
输出结果:
获得A知识
获得B知识
2.工厂模式
工厂模式其实就是在简单工厂的基础上将创建对象的逻辑挪到客户端,如此一来便于扩展类的种类,但是麻烦了客户端的编辑,下面例子其实就是在原有Book类的基础上将逻辑封装成工厂:
三个基础Book类不变;
package main.java.com.learn.factory.factory.abstractFactory; /**
* Created by garfield on 2016/6/13.
*/
public abstract class Creator {
abstract Book create();
}
package main.java.com.learn.factory.factory.abstractFactory; /**
* Created by garfield on 2016/6/13.
*/
public class ACreatorFactory extends Creator {
@Override
Book create() {
return new ABook();
}
}
package main.java.com.learn.factory.factory.abstractFactory; /**
* Created by garfield on 2016/6/13.
*/
public class BCreatorFactory extends Creator {
@Override
Book create() {
return new BBook();
}
}
package main.java.com.learn.factory.factory.abstractFactory; /**
* Created by garfield on 2016/6/13.
*/
public class FactoryTest { public static void main(String[] args){
Creator creator = new ACreatorFactory();
Creator creator2 = new BCreatorFactory();
Book a = creator.create();
Book b = creator2.create();
a.getKnowledge();
b.getKnowledge(); }
}
输出结果:
获得A知识
获得B知识
3.抽象工厂模式
虽然工厂模式使得逻辑更加清晰,扩展变得独立,但是如果需要增加类的种类,需要增加的工厂数量也同步增长,这也为扩展带来了不小负担,这也是抽象工厂与之的差别;
三个基础类依然不变,但是工厂不再是单一产品的工厂,工厂可以创建产品簇:
package main.java.com.learn.factory.factory.abstractFactory; /**
* Created by garfield on 2016/6/13.
*/
public abstract class Creator {
abstract ABook createA();
abstract BBook createB(); }
package main.java.com.learn.factory.factory.abstractFactory; /**
* Created by garfield on 2016/6/13.
*/
public class Factory extends Creator {
@Override
ABook createA() {
return new ABook();
} @Override
BBook createB() {
return new BBook();
}
}
package main.java.com.learn.factory.factory.abstractFactory; /**
* Created by garfield on 2016/6/13.
*/
public class AbstractFactoryTest {
public static void main(String[] args){
Creator creator = new Factory();
ABook a = creator.createA();
BBook b = creator.createB();
a.getKnowledge();
b.getKnowledge();
}
}
测试结果:
获得A知识
获得B知识
java设计模式案例详解:工厂模式的更多相关文章
- java设计模式案例详解:代理模式
代理模式就是用一个第三者的身份去完成工作,其实际意义跟字面意思其实是一样的,理解方式有很多,还是例子直观. 本例的实现类是实现买票功能,实际应用想要添加身份验证功能,利用代理模式添加验证步骤.上例子: ...
- java设计模式案例详解:观察者模式
观察者模式的应用场景: 1. 对一个对象状态的更新,需要其他对象同步更新,而且其他对象的数量动态可变. 2. 对象仅需要将自己的更新通知给其他对象而不需要知道其他对象的细节. 举个例子说明,这个例子讲 ...
- Java设计模式(1)工厂模式(Factory模式)
工厂模式定义:提供创建对象的接口. 为何使用工厂模式 工厂模式是我们最常用的模式了,著名的Jive论坛,就大量使用了工厂模式,工厂模式在Java程序系统可以说是随处可见. 为什么工厂模式是如此常用?因 ...
- java设计模式-----1、简单工厂模式
简单工厂模式是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式,但不属于23种GOF设计模式之一.简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例,简单来说 ...
- java反射案例详解
白首为功名.旧山松竹老,阻归程.欲将心事付瑶琴.知音少,弦断有谁听? [案例1]通过一个对象获得完整的包名和类名 package Reflect; /** * 通过一个对象获得完整的包名和类名 * * ...
- 重学 Java 设计模式:实战抽象工厂模式
作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获!
- 我以订披萨为例,给女朋友详细讲了Java设计模式的3种工厂模式
摘要:工厂模式是将实例化对象的代码提取出来,放到一个类中统一管理和维护,达到和主项目的依赖关系的解耦.从而提高项目的扩展和维护性. 本文分享自华为云社区<[Java设计模式]用 披萨订购案例 详 ...
- Java设计模式2:简单工厂模式
简单工厂模式 简单工厂模式是类的创建模式,又叫做静态工厂方法模式.简单工厂模式由一个工厂对象决定生产出哪一种产品类的实例. 为什么要使用简单工厂模式 原因很简单:解耦. A对象如果要调用B对象,最简单 ...
- JAVA设计模式(二)工厂模式
在面向对象编程中, 最通常的方法是一个new操作符产生一个对象实例,new操作符就是用来构造对象实例的.但是在一些情况下, new操作符直接生成对象会带来一些问题.举例来说, 许多类型对象的创造需要一 ...
随机推荐
- javase
http://blog.csdn.net/itlwc/article/category/1572517 http://blog.csdn.net/itlwc
- mobiscroll 插件札记(一)
mobiscroll 插件笔记(一) 文章参照 http://www.cnblogs.com/headwolf/archive/2013/12/23/3487207.html 最近切一个移动页面,需 ...
- linux php安装
Linux下配置安装PHP环境 参考别人的做法,遇到问题上网查,下面就是安装步骤. 一.安装Apache2.2.221.到官网下载 http://httpd.apache.org/download. ...
- 【瞎搞搞之】 window_x64微信小程序环境搭建
所需文件地址如下: http://pan.baidu.com/s/1nv0IHhn(ylk7) 1.下载微信开发工具0.7.0_x64 安装完成后,打开程序,进行微信扫码登录 2.下载微信开发工具 ...
- Struts国际化
第一步需要建立配置文件 格式为 文件名_zh_CN.properties 为中文配置文件 文件名_en_US.properties为美式英语配置文件 配置文件里面的值以键值对的形式 ...
- setsockopt()用法(参数详细说明)(转)
nt setsockopt(SOCKET s,int level,int optname,const char* optval,int optlen); s(套接字): 指向一个打开的套接口描述字le ...
- xampp 搭建 web mac上
1.安装 2.修改数据库密码,删除phpmyadmin ,用navicat 控制数据库 3.修改/Applications/XAMPP/xamppfiles/etc/extra/httpd-vhos ...
- ural 1118. Nontrivial Numbers
1118. Nontrivial Numbers Time limit: 2.0 secondMemory limit: 64 MB Specialists of SKB Kontur have de ...
- java代理的深入浅出(一)-Proxy
java代理的深入浅出(一)-Proxy 1.什么是代理 代理模式是常用的java设计模式,他的特征是代理类与委托类有同样的接口,代理类主要负责为委托类预处理消息.过滤消息.把消息转发给委托类,以及事 ...
- javaWEB总结(5):GET与POST请求
前言:get和post请求无论在项目中还是在面试中都会经常遇到,这次主要写一个小页面测试一下他们的区别,本人知识有限理解和说的简陋就全当给自己留个备份,日后再补充. 1.项目的目录结构 2.web.x ...