设计模式:

是一套被反复使用,多数人知晓的,经过分类编目的,代码设计经验总结。

工厂模式:

实例化对象,用工厂方法代替new操作。

工厂模式包括工厂方法模式和抽象工厂模式

抽象工厂模式是工厂方法模式的扩展

意图:

定义一个接口来创建对象,但是让子类来决定那些类需要被实例化

工厂方法把实例化的工作推迟到子类中实现

什么时候适合工厂模式:

有一组类似的对象需要创建。

在编码是不能遇见需要创建那种类的实例

系统需要考虑扩张性,不依赖于产品类实例如何被创建

首先客户端需要创建多样的发型

package com.nyan.factory;
/*** client * @author Administrator**/
public class HairTest {public static void main(String[] args) {
//        HairInterface  left = new LeftHair();
//        left.drow();
//        HairInterface  right = new RightHair();
//        right.drow();
        HairFactory factory = new HairFactory();factory.getHair("left").drow();factory.getHairByClass("com.nyan.factory.RightHair").drow();factory.getHairByClassKey("left").drow();}}

通过工厂替客户端创建格式各类的发型:

package com.nyan.factory;import java.util.Map;/*** 发型工厂* @author Administrator**/
public class HairFactory {public HairInterface getHair(String key){if("left".equals(key)){return new LeftHair();}else if("right".equals(key)){return new RightHair();}return null;}/*** 利用反射,根据类名生成对象* @return*/public HairInterface getHairByClass(String className){try {HairInterface hair = (HairInterface)Class.forName(className).newInstance();return hair;} catch (InstantiationException | IllegalAccessException| ClassNotFoundException e) {e.printStackTrace();}return null;}public HairInterface getHairByClassKey(String key){try {Map<String, String> map =new PropertiesReader().getProperties();HairInterface hair = (HairInterface)Class.forName(map.get(key)).newInstance();return hair;} catch (InstantiationException | IllegalAccessException| ClassNotFoundException e) {e.printStackTrace();}return null;}
}

利用抽象方法提供实现各种发型的类

package com.nyan.factory;
/*** 发型接口* @author Administrator**/
public interface HairInterface {public void drow();
}

package com.nyan.factory;public class LeftHair implements HairInterface {@Overridepublic void drow() {System.out.println("---左分发型---");}}
RightHair、InHair。。。

利用配置文件实现类的映射

right=com.nyan.factory.RightHair
left=com.nyan.factory.LeftHair

读取配置文件:

package com.nyan.factory;import java.io.IOException;
import java.io.InputStream;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;public class PropertiesReader {public Map<String,String> getProperties(){Properties props = new Properties();Map<String,String> map = new HashMap<String, String>();InputStream in = getClass().getResourceAsStream("type.properties");try {props.load(in);Enumeration enumeration = props.propertyNames();while (enumeration.hasMoreElements()) {String key = (String) enumeration.nextElement();String value = props.getProperty(key);map.put(key, value);}return map;} catch (IOException e) {e.printStackTrace();}return null;}}

转载于:https://www.cnblogs.com/Nyan-Workflow-FC/p/6483218.html

Java--工厂模式相关推荐

  1. java设计模式中不属于创建型模式_23种设计模式第二篇:java工厂模式定义:工厂模式是 Java 中最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式...

    23种设计模式第二篇:java工厂模式 定义: 工厂模式是 Java 中最常用的设计模式之一.这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式. 工厂模式主要是为创建对象提供过渡接口, ...

  2. 3种Java工厂模式深入理解分析

    Java工厂模式的概念 工厂模式适用于创建新对象最简单的办法是使用new关键字和具体类.工厂模式主要是为创建对象提供了接口.一般当在编码时不能预见需要创建哪种类的实例或者系统不应依赖于产品类实例如何被 ...

  3. java 工厂模式详解_java 工厂模式的实例详解

    java 工厂模式的实例详解 工厂方法中的"工厂"和我们平常理解的一样:用于生产产品. 而客户是要和产品打交道,所以工厂方法模式的意义在于把客户和产品分开,达到解耦和更灵活的目的. ...

  4. java工厂模式和抽象工厂_Java中的抽象工厂设计模式

    java工厂模式和抽象工厂 Welcome to Abstract Factory Design Pattern in java example. Abstract Factory design pa ...

  5. java工厂模式实例(设计模式)

    目录 java工厂模式 工厂模式其实又分为三种 1.简单工厂模式: 简单工厂模式(非静态) 简单工厂模式(静态): 2.工厂方法模式: 3.抽象工厂模式: java工厂模式 开篇声明,此理解为作者自身 ...

  6. JAVA -- 工厂模式之 抽象工厂模式

    定义: 在spring和其他的框架中,工厂模式被大量使用,实际上工厂模式就是帮助我们实例化对象的设计模式,因为在实际的项目中,实例化对象的同时,可能对象中有大量的初始化工作,如果每次项目有个地方用到这 ...

  7. java工厂模式的优势,java 工厂模式的讲解及优缺点的介绍

    简单工厂模式介绍: 概要: 简单工厂模式,又称为静态工厂方法(Static Factory Method)模式,它属于类创建型模式.在简单工厂模式中,把产品的生产方法封装起来放进工厂类,工厂类可以根据 ...

  8. Java工厂模式(随笔)

    目录 前言 一.三大工厂模式以及特殊工厂模式介绍 1.简单工厂模式简介(Simple Factory Pattern) 2.工厂模式简介   (Factory Pattern) 3.抽象工厂模式简介 ...

  9. java工厂模式 uml_简单工厂模式的UML类图与源码实现(转) | 学步园

    简单工厂模式的UML图 源码:Operation类 Java代码 packageOperation; publicabstractclassOperation { doublenumberA=0; d ...

  10. java 工厂模式的写法_[java设计模式] 工厂模式解析

    什么是工厂模式? 我的总结是: 遵守软件设计中的开闭原则和依赖反转原则, 并且客户端只需通过参数来创造多个对象, 并且在创建过程中,创建对象的过程对客户端是透明的. 这种开发模式叫做工厂模式. 出现原 ...

最新文章

  1. IDEA下使用Jetty进行Debug模式调试【含演示GIF图】
  2. 【实战教程】腾讯云搭建微信小程序服务
  3. informix clob转oracle 乱码_Oracle 视图-序列-权限-表-事务
  4. 02全志r58平台Android4.4.4下关闭内核中的CPU的开启关闭提示
  5. c语言尹宝林答案,c程序设计导引 尹宝林
  6. Linux卸载/删除多余网卡
  7. linux qt交叉编译opencv,c-使用Qt和opencv交叉编译到Raspberry Pi
  8. 使用maven工具无法进入debug
  9. CorePlot-饼状体
  10. 鸿蒙os 2.0跑分,预装鸿蒙 OS 2.0!华为 MatePad Pro2 跑分曝光:麒麟 9000、8GB 内存
  11. 禁止页面拖拽事件(数据什么的)
  12. 从贝叶斯定理到模糊动态贝叶斯网络
  13. Fragstats 提示错误与警告
  14. 队列DID:以知识青年“上山下乡”为例
  15. Win10电脑只有一个C盘怎么分区分盘?
  16. 关于NMDS的一知半解
  17. 计算机网络中的猫,猫(调制解调器)和路由器有什么区别和功能?
  18. ES2015中let的暂时性死区(TDZ)
  19. staircase nim 经典组合游戏
  20. 手机上怎么照证件照照片?教你两招轻松拍出证件照

热门文章

  1. 【Python实例第8讲】模型复杂度影响
  2. 【Python实例第2讲】特征提取集成方法
  3. Pandas系列(六)SettingWithCopyWarning报警
  4. ACM 学习笔记(三) 数学入门
  5. 【详细原理】蒙特卡洛树搜索入门教程!
  6. 基于GPU的大规模图计算系统与应用
  7. 移动前端自适应适配布局解决方案
  8. pytest-Mark数据驱动
  9. Https之SSL原理
  10. 不断被刷新的未来——读文档有感