您的位置:首页 > 编程语言 > Java开发

Java设计模式(1)——创建型模式之简单工厂模式(Simple Factory)

2017-10-25 23:10 459 查看
设计模式系列参考:

  http://www.cnblogs.com/Coda/p/4279688.html

一、概述


工厂模式主要是为创建对象提供过渡接口,以便将创建对象的具体过程屏蔽隔离起来,达到提高灵活性的目的。


工厂模式可以分为三类:

  1)简单工厂模式(Simple Factory)
  2)工厂方法模式(Factory Method)
  3)抽象工厂模式(Abstract Factory)

二、实践

   核心就是只要实现了统一接口(可以是标识性接口)(一般是实现了同一接口),把返回值(或者参数)进行抽象即可!

   直接看背景代码

/**
* 动物接口
* 作者: Administrator
* 日期: 2017/10/25
**/
public interface Animal {
void run();
}

/**
* 动物实现类——小狗
* 作者: Administrator
* 日期: 2017/10/25
**/
public class Dog implements Animal{
@Override
public void run() {
System.out.println("dog run...");
}
}
/**
* 动物实现类——小猫
* 作者: Administrator
* 日期: 2017/10/25
**/
public class Cat implements Animal{
@Override
public void run() {
System.out.println("cat run...");
}
}


  外部通过静态工厂方法,提供类型即可创建相关的对象!——一般都使用静态的方法,避免创建工厂的繁琐

public static Animal createAnimal(String type) {
if ("dog".equalsIgnoreCase(type)) {
return new Dog();
} else if ("cat".equalsIgnoreCase(type)) {
return new Cat();
} else {
System.out.println("找不到类型!");
return null;
}
}


  // 根据阿里规范提示,这里出现了“dog”这样的魔法值!

  

三、改进与思考

  改进为使用反射创建:

package com.roc.factory;
/**
* 简单工厂放射实现
* @author liaowp
*
*/
public class SampleFactory1 {
public static Human makeHuman(Class c){
Human human = null;
try {
human = (Human) Class.forName(c.getName()).newInstance();
} catch (InstantiationException e) {
// TODO Auto-generated catch block
System.out.println("不支持抽象类或接口");
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
System.out.println("没有足够权限,即不能访问私有对象");
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
System.out.println("类不存在");
e.printStackTrace();
}
return human;
}
}


  循环使用对象

  简单工厂每次都是new一个新的对象,如果业务逻辑允许,可以通过类似“单例模式”中的方式,循环使用创建的对象。——但是单例并不是简单工厂的退化,它是自身的工厂,并且构造器是私有的(防止外部创建对象)

  优缺点

  创建与使用的责任划分;

  违反“开闭原则”,难以扩展;工厂类作为“上帝类”负责了所有对象的创建,一旦工厂无法正常工作,将产生巨大影响!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: