工厂模式概念:

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

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

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

工厂模式的意图:

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

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

什么情况下适合工厂模式:

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

         在编码时不能预见需要创建哪种类的实例

系统需要考虑扩展性,不应依赖于产品类实例如何被创建、组合和表达的细节

工厂模式的动机:

         项目中的现状:在软件系统中经常面临着“对象”的创建工作,由于需求的变化,这个对象可能随之也会发生改变,但它却拥有比较稳定的接口。为此,我们需要提供一种封装机制来隔离出这个易变对象的变化,从而保持系统中其他依赖该对象不随着需求变化而变化。(做到低耦合)

 

 

基于项目现状将代码进行如下设计:

         尽量松耦合,一个对象的依赖对象的变化与本身无关

         具体产品与客户端剥离,责任分割

工厂方法模式和抽象工厂模式对比:

  1. 1.              工厂模式是一种极端情况的抽象工厂模式,而抽象工厂模式可以看成是工厂模式的推广
  2. 2.              工厂模式用来创建一个产品的等级结构,而抽象工厂模式是用来创建多个产品的等级结构
  3. 3.              工厂模式只有一个抽象产品类,而抽象工厂模式有多个抽象产品类

工厂模式的实现帮助我们:

  1. 1.       系统可以在不修改具体工厂角色的情况下引进新的产品
  2. 2.       客户端不必关心对象如果创建,明确了职责
  3. 3.       更好的理解面向对象的原则、面向接口编程,而不是面向实现编程

工厂模式代码示例

1.创建接口

 1 /**
2 * 发型接口
3 * **/
4 public interface HairInterface {
5 //实现了发型
6 public void draw();
7 }

2.实现接口

 /**
* 实现接口*/
public class LeftHair implements HairInterface{
@Override
public void draw() {
System.out.println("LeftHair......");
}
}
public class RightHair implements HairInterface{
@Override
public void draw() {
System.out.println("RightHair......");
}
}

3.创建配置文件

4.读取配置文件,并返回一个map

 public class PropertiesReader {
public Map<String, String> getProperties(){
Properties props = new Properties();
Map<String, String> map = new HashMap<String, String>();
try{
InputStream in = getClass().getResourceAsStream("type.properties");
props.load(in);
Enumeration en = props.propertyNames();
while(en.hasMoreElements()){
String key = (String)en.nextElement();
String property = props.getProperty(key);
map.put(key, property);
}
}catch(Exception e){
e.printStackTrace();
}
return map;
}
}

5.创建一个工厂,让工厂来创建对象

 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;
}
/**
* 根据类的名称来生产对象
* */
public HairInterface getHairByClass(String classname){
try {
HairInterface hair = (HairInterface) Class.forName(classname).newInstance();
return hair;
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} return null;
}
/**
* 根据索引来产生对象*/
public HairInterface getHairByClasskey(String key){
try {
//得到map映射
Map<String, String> map = new PropertiesReader().getProperties();
//根据键得到值
HairInterface hair = (HairInterface) Class.forName(map.get(key)).newInstance();
return hair;
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} return null;
} }

6.测试类

 public class Test {
public static void main(String[] args) {
// HairInterface left = new LeftHair();
// left.draw();
// HairInterface right = new RightHair();
// right.draw();
//
// HairInterface left = new HairFactory().getHair("left");
// left.draw();
// HairInterface right = new HairFactory().getHairByClass("com.wzy.Factory_model.RightHair");
// right.draw();
/**根据
*
* 利用配置文件,根据索引来得到对象**/
HairInterface hair = new HairFactory().getHairByClasskey("in");
hair.draw();
}
}

JAVA设计模式之工厂模式的更多相关文章

  1. 浅析JAVA设计模式之工厂模式(一)

    1 工厂模式简单介绍 工厂模式的定义:简单地说,用来实例化对象,取代new操作. 工厂模式专门负责将大量有共同接口的类实例化.工作模式能够动态决定将哪一个类实例化.不用先知道每次要实例化哪一个类. 工 ...

  2. Java设计模式之工厂模式(Factory模式)介绍(转载)

    原文见:http://www.jb51.net/article/62068.htm 这篇文章主要介绍了Java设计模式之工厂模式(Factory模式)介绍,本文讲解了为何使用工厂模式.工厂方法.抽象工 ...

  3. Java 设计模式之工厂模式(二)

    原文地址:Java 设计模式之工厂模式(二) 博客地址:http://www.extlight.com 一.背景 本篇内容是 Java 设计模式创建型模式的第二篇.上一篇主题为 <Java 设计 ...

  4. 浅析JAVA设计模式之工厂模式(二)

    1 工厂方法模式简单介绍 工厂方法 (Factroy Method)模式:又称多态性工厂模式(Polymorphic Factory),在这样的模式中,核心工厂不再是一个详细的类.而是一个抽象工厂,提 ...

  5. java设计模式2————工厂模式

    1.工厂模式介绍: 1.1.实现了创建者与调用者的分离 1.2.详细分类: 简单工厂模式 工厂方法模式 抽象工厂模式 1.3.所遵循的OOP原则: 开闭原则:对扩展开放,对修改关闭 依赖倒转原则:面向 ...

  6. java 设计模式之工厂模式与反射的结合

    工厂模式: /**  * @author Rollen-Holt 设计模式之 工厂模式  */   interface fruit{     public abstract void eat(); } ...

  7. JAVA设计模式--抽象工厂模式

    抽象工厂设计模式 1.系统中有多个产品族,而系统一次只可能消费其中一族产品2.同属于同一个产品族的产品以其使用.来看看抽象工厂模式的各个角色(和工厂方法的如出一辙):抽象工厂角色: 这是工厂方法模式的 ...

  8. Java设计模式之-----工厂模式(简单工厂,抽象工厂)

    一.工厂模式主要是为创建对象提供过渡接口,以便将创建对象的具体过程屏蔽隔离起来,达到提高灵活性的目的. 工厂模式在<Java与模式>中分为三类:1)简单工厂模式(Simple Factor ...

  9. Java设计模式之工厂模式(简单工厂模式+工厂方法模式)

    摘自http://blog.csdn.net/jason0539/article/details/23020989 在面向对象编程中, 最通常的方法是一个new操作符产生一个对象实例,new操作符就是 ...

  10. java设计模式之一工厂模式

    简单工厂模式是java设计模式中最简单的设计模式之一: 工厂模式是最常用的设计模式之一. 工厂模式就相当于创建实例对象的new,我们经常要根据类Class生成实例对象,如A a=new A() 工厂模 ...

随机推荐

  1. Spring AOP专业术语解析

    一. 连接点(Joinpoint) 连接点就是程序执行的某个特定的位置,如:类开始初始化前.类初始化后.类的某个方法调用前.类的某个方法调用后.方法抛出异常后等.Spring 只支持类的方法前.后.抛 ...

  2. angular源码分析:angular的整个加载流程

    在前面,我们讲了angular的目录结构.JQLite以及依赖注入的实现,在这一期中我们将重点分析angular的整个框架的加载流程. 一.从源代码的编译顺序开始 下面是我们在目录结构哪一期理出的an ...

  3. JavaScript学习笔记6 之经典神坑题整理

    本篇内容是关于容易出错题的整理,这些题也有利于对javascript的语法逻辑的理解,分析的内容仅供参考: <script> */ var x=0 , y=0 , c=1; functio ...

  4. Node创建应用

    github地址:https://github.com/lily1010/Node_learn/tree/master/test 一 使用node的意义 使用 Node.js 时,我们不仅仅 在实现一 ...

  5. arcgis server 下无法执行复杂的运算符

    1.Open the Administrator Directory and log in as a user with administrative permissions to the site. ...

  6. windows 8安装wp8之后鼠标没反应了

    笔记本是windows 8 系统,昨天安装了windows phone 8.0 SDK 之后,发现无线鼠标没反应了,但是触摸屏鼠标可以正常移动!真是奇怪,旁边同学也是安装了这个sdk,但没出什么问题! ...

  7. Android中各种Drawable总结

    在Android中,Drawable使用广泛,但是种类也多,基于<Android开发艺术探索>中对Drawable的讲解,总结了如下表格.

  8. iOS--通讯录(UITableViewController)

    本文主要实现通讯录的部分功能(分组名.索引.分组的组名)等等功能: 废话不多说了,先上效果图: 在工程中需要导入一个plist文件,文件图如图: 工程目录文件如图: 工程程序如图所示: RootTab ...

  9. linux下安装opcache扩展

    linux下安装opcache扩展   参考:http://www.php.net/manual/zh/opcache.installation.php 1 2 3 4 5 6 7 wget http ...

  10. classpath: 和classpath*:的区别

    classpath本质是jvm的根路径,jvm获取资源都是从该根路径下找的,注意这个根路径是个逻辑路径,并不是磁盘路径.比如两个jar包的路径是/a/a.jar和/b/b.jar,但是用classpa ...