java设计模式2--工厂模式
1、工厂模式特点
可以工厂获取我们所需要的类。我们不需要知道工厂的内部是如何实现的,我们只需要告诉工厂我们需要哪个类,工厂就会自动返回我想要的类。
简单来说:工厂帮我们隐藏了复杂的逻辑处理过程,我们只需要关心结果。
2、工厂模式分类
1:简单工厂:功能强大,但可扩展性不强
2:工厂方法:独立分工,但学习成本过高
2:抽象工厂:简单工厂和工厂方法的结合
3、简单工厂模式
例:假设有一个人想通过运营商要买一个4G、5.5寸屏幕的手机。运营商符合标准的只有三个牌子的手机:HUAWEI、OPPO、VIVO。这时这个人只要知道自己想买什么牌子的手机就可以拿到手机了,不需要知道如何生产手机的。
实现:
(1)工艺标准接口
1 public Interface Phone{ 2 fine static int memory=4; 3 fine static float size=5.5; 4 string getPhone(); 5 }
(2)HUAWEI类,需要工艺标准那样子的手机
1 public class HUAWEI implement Phone{ 2 public String getPhone(){ 3 return "HUAWEI"+memory+"G内存"+size+"寸屏幕"; 4 } 5 }
(3)OPPO类,也是需要工艺标准那样子的手机
1 public class OPPO implement Phone{ 2 public String getPhone(){ 3 return "OPPO"+memory+"G内存"+size+"寸屏幕"; 4 } 5 }
(4)VIVO类,也是需要工艺标准那样子的手机
1 public class VIVO implement Phone{ 2 public String getPhone(){ 3 return "VIVO"+memory+"G内存"+size+"寸屏幕"; 4 } 5 }
(5)工厂类,实例化各牌子的手机供用户选择
1 public class SimpleFactory{ 2 public Phone getPhone(String name){ 3 if("HUAWEI".equalsIgnoreCse(name)){ 4 return new HUAWEI(); 5 }else if("OPPO".equalsIgnoreCase(name)){ 6 return new OPPO(); 7 }else if("VIVO".equalsIgnoreCase(name)){ 8 return new VIVO(); 9 }else{ 10 System.out.println("没有这个牌子的手机!!") 11 return null; 12 } 13 }
(6)测试类,这里只要知道我需要手机牌子的名字,我就可以得到对应的实例化对象,我不需要知道它是如何创建的
1 public class SimpleFactoryTest { 2 public static void main(String[] args) { 3 // 实现统一管理、专业化管理 4 Phone phone = new SimpleFactory().getPhone("HUAWEI"); 5 System.out.println("我获得了新手机:"+phone.getPhone()); 6 } 7 }
4、工厂方法模式
定义一套公开的标准,然后不同的品牌的手机不同的工厂生产,HUAWEI生产HUAWEI的,OPPO生产OPPO的,有自己的个性化设置
(1)定义公开标准
public interface Phone{public Phone getPhone(); }
(2)HUAWEI生产HUAWEI手机,可以定制个性化
1 public class HUAWEIFactory implement Phone{ 2 public String color="白色"; 3 public Phone getPhone{ 4 return new HUAWEI(); 5 } 6 }
(3)OPPO生产OPPO的手机
1 public class OPPOFactory implement Phone{ 2 public String color="黑色"; 3 public Phone getPhone(){ 4 return new OPPO(); 5 } 6 }
(4)VIVO生产VIVO的手机
1 public class VIVOFactory implement Phone{ 2 public String color="红色"; 3 public Phone getPhone(){ 4 return new VIVO(); 5 } 6 }
(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、抽象工厂模式
第三代理品牌,代理了三家手机制造公司,然后卖给运营商,赚取中间差价。
1 #代理工厂 2 public abstract class AbstractFactory { 3 abstract Phone getPhone(); 4 //这段代码动态配置的功能 5 public Phone getPhone(String name) { 6 if ("HUAWEI".equalsIgnoreCase(name)) { 7 return new HUAWEIFactory().getPhone(); 8 } else if ("OPPO".equalsIgnoreCase(name)) { 9 return new OPPOFactory().getPhone(); 10 } else if ("VIVO".equalsIgnoreCase(name)) { 11 return new VIVOFactory().getPhone(); 12 } else { 13 System.out.println("这个r手机暂无生产"); 14 return null; 15 } 16 17 } 18 } 19 #默认工厂包装了HUAWEI类 20 public class DefaultFactory extends AbstractFactory{ 21 private HUAWEIFactory factory=new HUAWEIFactory(); 22 Phone getPhone() { 23 24 return factory.getPhone(); 25 } 26 }
(2)、HUAWEI工厂
1 public class HUAWEIFactory extends AbstractFactory { 2 public Phone getPhone() { 3 return new HUAWEI(); 4 } 5 }
(3)、OPPO工厂
1 public class OPPOFactory extends AbstractFactory { 2 public Phone getPhone() { 3 return new OPPO(); 4 } 5 }
(4)、VIVO工厂
1 public class VIVOFactory extends AbstractFactory { 2 public Phone getPhone() { 3 return new VIVO(); 4 } 5 }
转载于:https://www.cnblogs.com/EmilZs/p/9401514.html
java设计模式2--工厂模式相关推荐
- Java设计模式(工厂模式>抽象工厂模式和原型模式)
Java设计模式Ⅱ 1.工厂模式 1.1 简单工厂模式 1.2 工厂方法模式 2.抽象工厂模式 3.总结 4.原型模式 4.1 原型模式 4.2 浅拷贝 4.3 深拷贝 5.建造者模式 1.工厂模式 ...
- Java 设计模式之工厂模式(二)
原文地址:Java 设计模式之工厂模式(二) 博客地址:http://www.extlight.com 一.背景 本篇内容是 Java 设计模式创建型模式的第二篇.上一篇主题为 <Java 设计 ...
- java设计模式之工厂模式(UML类图分析+代码详解)
大家好,我是一名在算法之路上不断前进的小小程序猿!体会算法之美,领悟算法的智慧~ 希望各位博友走过路过可以给我点个免费的赞,你们的支持是我不断前进的动力!! 加油吧!未来可期!! 本文将介绍java设 ...
- Java设计模式之工厂模式篇 (转)
Java设计模式之工厂模式篇 (转)[@more@]Java设计模式之工厂模式篇 作者:冯睿 本文选自:赛迪网 2003年03月07日 .NET.com.cn/servlets/ad?Pool=te ...
- Java设计模式之 工厂模式(简单工厂模式)
前一阵子学习了Java 中据说是最简单的设计模式的 单例模式,想一起讨论学习的小伙伴请点击这里: Java 设计模式之单例模式 那么今天就把学习的工厂模式记录下来 工厂模式: 实现了创建者和调用者的分 ...
- Java设计模式之工厂模式 (工厂方法模式)
上一篇我们学习了简单工厂模式,最后对于增加新产品的缺点,我们在工厂方法模式中解决. 为学习简单工厂模式的小伙伴点击这里Java 设计模式之工厂模式(简单工厂模式) 工厂方法模式要点: 避免简单工厂模式 ...
- 【JAVA进阶系列】JAVA 设计模式 -- 抽象工厂模式(Abstract Factory)
[JAVA进阶系列]JAVA 设计模式 -- 抽象工厂模式(Abstract Factory) [1.1]抽象工厂模式简介 抽象工厂者模式的类结构图 AbstractProduct(抽象产品),Abs ...
- JAVA设计模式之工厂模式讲解
目录 前言 开始表演 前言 Java中使用工厂模式的主要原因是为了实现代码的灵活性和可维护性.工厂模式是一种创建型设计模式,它提供了一种将对象的创建和使用进行分离的方式.具体来说,工厂模式可以将对象的 ...
- Java设计模式:工厂模式
问题提出 Java的工厂模式与现实生活中的工厂的模型是很相似的.工厂是用来做什么?当然是用来生成产品.因此在Java的工厂模式的关键点就是如何描述好产品和工厂这2个角色之间的关系. 下面来仔细描述一下 ...
- java设计模式---抽象工厂模式
工厂模式在项目中是常常用到的,有人说只有大项目才会用到,小项目是体会不出来.其实使用设计模式与项目的大小没有实质性的联系.设计模式是经验的总结而不是衡量项目大小的标准. 以开发项目的DAO层为例,在项 ...
最新文章
- IEEE 发布年终总结,AI 奇迹不再是故事
- mega_[MEGA DEAL] 2018 Essential JavaScript编码捆绑包(96%折扣)
- Android应用自动更新功能的代码实现
- Mongodb在windows下配置文件的配置
- 获取input相同名字的元素的值
- LeetCode 1973. Count Nodes Equal to Sum of Descendants(DFS)
- 视觉SLAM十四讲学习笔记专栏汇总
- 在Linux下生成crypt加密密码
- 大数据学习笔记42:Hive - 分桶表
- Mac桌面上找不到或无法显示USB问题
- VS2013 堆栈溢出调查(0xC00000FD: Stack overflow)
- 太原理工java实验报告_太原理工大学-JAVA实验报告.doc
- pyLDA系列︱gensim中的主题模型(Latent Dirichlet Allocation)
- matlab一维插值extrap,matlab一维插值函数
- Java关键字详解-配视频讲解链接(附带一些面试题)
- 【10大基础算法】广度优先搜索-NO7
- 在虚拟环境下使用pip install -r requirements.txt导入项目依赖包却没有安装上出现的问题
- B2092 开关灯 【入门】
- java转换2进制_java里怎样把文件转换成二进制
- 【C语言】初始C语言系列 代码详解 _ 编程入门 _【内附代码和图片】_ [初阶篇 _ 总结复习]