java设计模式2--工厂模式
1、工厂模式特点
可以工厂获取我们所需要的类。我们不需要知道工厂的内部是如何实现的,我们只需要告诉工厂我们需要哪个类,工厂就会自动返回我想要的类。
简单来说:工厂帮我们隐藏了复杂的逻辑处理过程,我们只需要关心结果。
2、工厂模式分类
1:简单工厂:功能强大,但可扩展性不强
2:工厂方法:独立分工,但学习成本过高
2:抽象工厂:简单工厂和工厂方法的结合
3、简单工厂模式
例:假设有一个人想通过运营商要买一个4G、5.5寸屏幕的手机。运营商符合标准的只有三个牌子的手机:HUAWEI、OPPO、VIVO。这时这个人只要知道自己想买什么牌子的手机就可以拿到手机了,不需要知道如何生产手机的。
实现:
(1)工艺标准接口
public Interface Phone{
fine static int memory=4;
fine static float size=5.5;
string getPhone();
}
(2)HUAWEI类,需要工艺标准那样子的手机
public class HUAWEI implement Phone{
public String getPhone(){
return "HUAWEI"+memory+"G内存"+size+"寸屏幕";
}
}
(3)OPPO类,也是需要工艺标准那样子的手机
public class OPPO implement Phone{
public String getPhone(){
return "OPPO"+memory+"G内存"+size+"寸屏幕";
}
}
(4)VIVO类,也是需要工艺标准那样子的手机
1 public class VIVO implement Phone{
2 public String getPhone(){
3 return "VIVO"+memory+"G内存"+size+"寸屏幕";
4 }
5 }
(5)工厂类,实例化各牌子的手机供用户选择
public class SimpleFactory{
public Phone getPhone(String name){
if("HUAWEI".equalsIgnoreCse(name)){
return new HUAWEI();
}else if("OPPO".equalsIgnoreCase(name)){
return new OPPO();
}else if("VIVO".equalsIgnoreCase(name)){
return new VIVO();
}else{
System.out.println("没有这个牌子的手机!!")
return null;
}
}
(6)测试类,这里只要知道我需要手机牌子的名字,我就可以得到对应的实例化对象,我不需要知道它是如何创建的
public class SimpleFactoryTest {
public static void main(String[] args) {
// 实现统一管理、专业化管理
Phone phone = new SimpleFactory().getPhone("HUAWEI");
System.out.println("我获得了新手机:"+phone.getPhone());
}
}
4、工厂方法模式
定义一套公开的标准,然后不同的品牌的手机不同的工厂生产,HUAWEI生产HUAWEI的,OPPO生产OPPO的,有自己的个性化设置
(1)定义公开标准
public interface Phone{
public Phone getPhone();
}
(2)HUAWEI生产HUAWEI手机,可以定制个性化
public class HUAWEIFactory implement Phone{
public String color="白色";
public Phone getPhone{
return new HUAWEI();
}
}
(3)OPPO生产OPPO的手机
public class OPPOFactory implement Phone{
public String color="黑色";
public Phone getPhone(){
return new OPPO();
}
}
(4)VIVO生产VIVO的手机
public class VIVOFactory implement Phone{
public String color="红色";
public Phone getPhone(){
return new VIVO();
}
}
(5)测试方法
public class Test{
public static void main(){
Phone phone=new HUAWEIFactory();
System.out.println("我要白色的HUAWEI手机:"+phone.getPhone);
phone=new OPPOFactory();
System.out.println("我要黑色的OPPO手机:"+phone.getPhone);
phone=new VIVOFactory();
System.out.println("我要红色的VIVO手机:"+phone.getPhone);
}
}
5、抽象工厂模式
第三代理品牌,代理了三家手机制造公司,然后卖给运营商,赚取中间差价。
#代理工厂
public abstract class AbstractFactory {
abstract Phone getPhone();
//这段代码动态配置的功能
public Phone getPhone(String name) {
if ("HUAWEI".equalsIgnoreCase(name)) {
return new HUAWEIFactory().getPhone();
} else if ("OPPO".equalsIgnoreCase(name)) {
return new OPPOFactory().getPhone();
} else if ("VIVO".equalsIgnoreCase(name)) {
return new VIVOFactory().getPhone();
} else {
System.out.println("这个r手机暂无生产");
return null;
} }
}
#默认工厂包装了HUAWEI类
public class DefaultFactory extends AbstractFactory{
private HUAWEIFactory factory=new HUAWEIFactory();
Phone getPhone() { return factory.getPhone();
}
}
(2)、HUAWEI工厂
public class HUAWEIFactory extends AbstractFactory {
public Phone getPhone() {
return new HUAWEI();
}
}
(3)、OPPO工厂
public class OPPOFactory extends AbstractFactory {
public Phone getPhone() {
return new OPPO();
}
}
(4)、VIVO工厂
public class VIVOFactory extends AbstractFactory {
public Phone getPhone() {
return new VIVO();
}
}
java设计模式2--工厂模式的更多相关文章
- 浅析JAVA设计模式之工厂模式(一)
1 工厂模式简单介绍 工厂模式的定义:简单地说,用来实例化对象,取代new操作. 工厂模式专门负责将大量有共同接口的类实例化.工作模式能够动态决定将哪一个类实例化.不用先知道每次要实例化哪一个类. 工 ...
- Java设计模式之工厂模式(Factory模式)介绍(转载)
原文见:http://www.jb51.net/article/62068.htm 这篇文章主要介绍了Java设计模式之工厂模式(Factory模式)介绍,本文讲解了为何使用工厂模式.工厂方法.抽象工 ...
- Java 设计模式之工厂模式(二)
原文地址:Java 设计模式之工厂模式(二) 博客地址:http://www.extlight.com 一.背景 本篇内容是 Java 设计模式创建型模式的第二篇.上一篇主题为 <Java 设计 ...
- 浅析JAVA设计模式之工厂模式(二)
1 工厂方法模式简单介绍 工厂方法 (Factroy Method)模式:又称多态性工厂模式(Polymorphic Factory),在这样的模式中,核心工厂不再是一个详细的类.而是一个抽象工厂,提 ...
- java设计模式2————工厂模式
1.工厂模式介绍: 1.1.实现了创建者与调用者的分离 1.2.详细分类: 简单工厂模式 工厂方法模式 抽象工厂模式 1.3.所遵循的OOP原则: 开闭原则:对扩展开放,对修改关闭 依赖倒转原则:面向 ...
- java 设计模式之工厂模式与反射的结合
工厂模式: /** * @author Rollen-Holt 设计模式之 工厂模式 */ interface fruit{ public abstract void eat(); } ...
- JAVA设计模式--抽象工厂模式
抽象工厂设计模式 1.系统中有多个产品族,而系统一次只可能消费其中一族产品2.同属于同一个产品族的产品以其使用.来看看抽象工厂模式的各个角色(和工厂方法的如出一辙):抽象工厂角色: 这是工厂方法模式的 ...
- Java设计模式之-----工厂模式(简单工厂,抽象工厂)
一.工厂模式主要是为创建对象提供过渡接口,以便将创建对象的具体过程屏蔽隔离起来,达到提高灵活性的目的. 工厂模式在<Java与模式>中分为三类:1)简单工厂模式(Simple Factor ...
- Java设计模式之工厂模式(简单工厂模式+工厂方法模式)
摘自http://blog.csdn.net/jason0539/article/details/23020989 在面向对象编程中, 最通常的方法是一个new操作符产生一个对象实例,new操作符就是 ...
- java设计模式之一工厂模式
简单工厂模式是java设计模式中最简单的设计模式之一: 工厂模式是最常用的设计模式之一. 工厂模式就相当于创建实例对象的new,我们经常要根据类Class生成实例对象,如A a=new A() 工厂模 ...
随机推荐
- springMvc配置 中文api
http://7xvpsh.com1.z0.glb.clouddn.com/publish/21-2/the-dispatcher-servlet.html springmvc4.1.7:配置 复制转 ...
- MySQL存储过程的动态行转列
MySQL存储过程中使用动态行转列 最近做项目关于数据报表处理,然而数据库存储格式和报表展现形式不同,需要进行一下行转列的操作,在做上一个项目的时候也看了一下,但是后来换了读取方式,也就没深入研究这个 ...
- (转)linux命令总结之ip命令
linux命令总结之ip命令 原文:https://www.cnblogs.com/ginvip/p/6367803.html linux命令总结之ip命令 Linux的ip命令和ifconfig ...
- Spark Mllib里的如何对两组数据用斯皮尔曼计算相关系数
不多说,直接上干货! import org.apache.spark.mllib.stat.Statistics 具体,见 Spark Mllib机器学习实战的第4章 Mllib基本数据类型和Mlli ...
- 【Java密码学】使用Bouncy Castle生成数字签名、数字信封
Bouncy Castle(轻量级密码术包)是一种用于 Java 平台的开放源码的轻量级密码术包,它支持大量的密码术算法,并提供 JCE 1.2.1 的实现.最近项目上正好用到了Bouncy Cast ...
- Docker:安装部署RabbitMQ
前言 今天原本想讲解SpringBoot集成RabbitMQ的,临近开始写时才发现家里的电脑根本没有安装RabbitMQ呀.这下只好利用已有的阿里云服务器,直接Docker安装一下了,顺道记录下,算是 ...
- MySQL三种存储引擎总结
MySQL三种存储引擎 MyISAM.InnoDB.MEMORY 1.MyISAM MyISAM,3.23.34a前的默认存储引擎. 优缺点 优点 在于占用空间小,处理速度快. 缺点 不支持事务的完整 ...
- 导入maven多模块项目 出现的问题
近日导入maven多模块项目 出现的问题以及解决过程2017年12月04日 20:43:04 守望dfdfdf 阅读数:815 标签: jdkmavenmaven pom.xml 更多个人分类: 工作 ...
- juypter-notebook安装配置
juypter-notebook安装配置 Table of Contents 1. jupyter notebook概述 2. jupyter notebook安装 3. 在jupyter noteb ...
- 从零开始的全栈工程师——js篇2.4
条件语句与循环语句 变量提升: 变量提升是浏览器的一个功能,在运行js代码之前,浏览器会给js一个全局作用域叫window ,window分两个模块,一个叫内存模块,一个叫运行模块,内存模块找到当前作 ...