`

设计模式——简单工厂

 
阅读更多

 

 

1 初识简单工厂:
 定义:提供一个创建对象实例,而不关心具体实现的功能;
 结构:



 
 参考实现:

public class Client {
	
	public  static final int A = 1;
	public  static final int B = 1;
	

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		
		Factory factory = new Factory();
		ProductSample productSample = factory.makeProduct(A);
		productSample.function();

	}

}

/**
 * 创建产品的地方
 * @author zm
 *
 */
public class Factory {
	

	ProductSample productSample;
	
	public ProductSample makeProduct(int i){
		
		if(i == 1) {
			productSample = new ProductA();
		}
		
		if(i == 2) {
			productSample = new ProductB();
		}
		
		return productSample;
	}
}

public interface ProductSample {

	public void function(); // 产品具备的功能
}


public class ProductA implements ProductSample {

	@Override
	public void function() {
		System.out.println("this is productA, i can dance for you");
	}

}


public class ProductB implements ProductSample {

	@Override
	public void function() {
		System.out.println("this is productB, i can sing for you");
	}

}

  

 


2 体会简单工厂:
 不用模式的解决方案:面向接口编程,具体实现类可以有多种,根据配置参数决定具体使用哪个实现类
 使用模式的解决方案:直接 new 具体实现类; 这样不灵活,以后替换别的实现方案时,需要修改具体代码

 

3 理解简单工厂:
 3.1) 典型疑问:上述案例,创建实例仅仅是从客户端类client移动到factory类,就这么简单吗?

        回答: 理解简单工厂所处的位置,

     客户端仅仅根据需求文档,  发送需要产品参数给工厂即可,其余事情交给工厂,

     客户端真正实现和具体实现的隔离


 3.2)认识简单工厂:功能就是用于创建接口,抽象类,普通类的实例

 

 3.3)简单工厂的变种:
      a) 静态工厂:就是将工厂类构造函数私有化,创建方法static化

 

 

 3.4)简单工厂创建范围: 控制在一个独立的组件级别或模块级别

 3.5) 时序图:

 

 

 

      

 3.6) 可配置的简单工厂: 使用配置文件+反射方式

 eg:

public class Factory {
	/**
	 * 具体的创造Api的方法,根据配置文件的参数来创建接口
	 * @return 创造好的Api对象
	 */
	public static Api createApi(){
		//直接读取配置文件来获取需要创建实例的类
		
		//至于如何读取Properties还有如何反射这里就不解释了
		Properties p = new Properties(); 
		InputStream in = null;
		try {
			// 从配置文件中决定 是new出具体的哪个接口实现类
			in = Factory.class.getResourceAsStream("FactoryTest.properties");
			p.load(in);
		} catch (IOException e) {
			System.out.println("装载工厂配置文件出错了,具体的堆栈信息如下:");
			e.printStackTrace();
		}finally{
			try {
				in.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
		//用反射去创建具体产品实现类;  
		Api api = null;
		try {
			api = (Api)Class.forName(p.getProperty("ImplClass")).newInstance();
		} catch (InstantiationException e) {
			e.printStackTrace();
		} catch (IllegalAccessException e) {
			e.printStackTrace();
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}
		return api;
	}
}


FactoryTest.properties:
ImplClass=cn.javass.dp.simplefactory.example5.Impl

 

 


 3.7)优缺点:

    a) 帮助封装

    b) 可能增加客户端使用复杂度(eg: 根据参数不同 常见不同具体实现类)
 

 

 


4 思考简单工厂:
 本质:是选择,而不是实现,实现类是已经都写好的,仅需要做出要选择哪种实现写法
 何时选用:

    a) 完全封装隔离的具体实现,外部只能通过接口来操作封装体---> 客户端通过工厂获取对应的接口,具体实现交给工厂调用具体实现类

   b)  将对外创建对象的职责集中管理和控制

 

 5 简单工厂脑图:

 



 

 

  • 大小: 74.4 KB
  • 大小: 50.4 KB
  • 大小: 15.6 KB
分享到:
评论

相关推荐

    设计模式——简单工厂模式

    这个是http://blog.csdn.net/dawanganban/article/details/9875873博客中java设计模式的源代码。下载前请先看《设计模式——简单工厂》一文。

    实验二 简单工厂模式.zip_31QS_C#_设计模式——简单工厂模式_设计模式实验

    经典的设计模式————简单工厂模式,里面有实验文档和实验源代码还有课件助于你的学习

    设计模式——简单工厂 VS 工厂方法

    NULL 博文链接:https://maidoudao.iteye.com/blog/1328618

    设计模式C#描述之——简单工厂模式

    设计模式C#描述之——简单工厂模式,让你学习C#的一种设计模式

    设计模式——工厂模式在开发中的应用(简单计算器)

    这个是http://blog.csdn.net/dawanganban/article/details/9884681博客中java设计模式的源代码。下载前请先看《设计模式——工厂模式在开发中的应用》一文。

    Python设计模式之简单工厂模式实例详解

    本文实例讲述了Python设计模式之简单工厂模式。分享给大家供大家参考,具体如下: 简单工厂模式(Simple Factory Pattern):是通过专门定义一个类...设计模式——简单工厂模式 简单工厂模式(Simple Factory Pattern):是通

    Java设计模式——工厂设计模式

    简单工厂模式 工厂方法模式 抽象工厂模式 面向对象设计的基本原则: OCP(开闭原则,Open-Closed Principle):一个软件的实体应当对扩展开放,对修改关闭。 DIP(依赖倒转原则,Dependence Inversion Principle):...

    C#设计模式(3)——工厂方法模式.pdf

    此 时工厂类不再负责所有产品的创建,而只是给出具体工厂必须实现的接口,这样工厂方法模式就可以允许 系统不修改工厂类逻辑的情况下来添加新产品,这样也就克服了简单工厂模式中缺点。下面看下工厂模式 的具体实现...

    简单工厂模式

    设计模式课程资料——简单工厂模式,使用Java实现,在eclipse进行编译

    (创建模式 上)设计模式——工厂、抽象工厂 C++/Python3实现

    设计模式是为了解决一些出现的问题设计的解决方案。是长时间经验的总结,是根据不同问题从而提出并且实践出来的解决办法。使用不同的设计模式可以解决不同的问题。 设计模式可以分为三种大类别:分别是创建型模式、...

    应用了设计模式之简单工厂模式的计算器

    完成了,但感觉这也没啥特别的,程序界面黑布隆冬的,内部结构也是最最平常的面向对象,于是我应用了《大话设计模式》这本书中的第一个模式——简单工厂模式,看上去还不错。界面的话,也就是输出的语句变了,system...

    C++设计模式之工厂方法模式

    之前讲到了C++设计模式——简单工厂模式,由于简单工厂模式的局限性,比如:工厂现在能生产ProductA、ProductB和ProductC三种产品了,此时,需要增加生产ProductD产品;那么,首先是不是需要在产品枚举类型中添加新...

    C#工厂设计模式简单实例

    C#工厂设计模式简单实例——计算器 public class Factory { //创建一个静态方法 public static Operation CreateOper(int a, int b, string oper) { //创建一个Operation对象 Operation op = null; switch ...

    Java设计模式:工厂模式——图文+代码示例(通俗易懂)

    先来看看,简单工厂模式——也叫静态工厂模式,这里举个例子:你要去买一台手机,你不用关心手机是怎么生产出来的,里面的零件具体又是怎么制造的,这些通通都交给工厂去处理,你尽管去买手机就好了。 简单工厂模式...

    Java设计模式 版本2

    Java设计模式,目录:前言,UML建模技术,深入浅出UML类图,从招式与内功谈起——设计模式概述,面向对象设计原则,工厂三兄弟之简单工厂模式,工厂三兄弟之工厂方法模式,工厂三兄弟之抽象工厂模式,确保对象的唯一...

    C++设计模式原理与实战视频课

    C++设计模式原理与实战视频课 1-1 课程介绍 1-2 导论UML和设计模式导论 2-1 简单工厂方法的定义场景与实现-针对接口编程的设计思想剖析 2-2 简单工厂实用工程技术:C++对象动态创建技术与配置化开发 2-3 单例模式的...

    深入浅出设计模式(中文版)

    1.1什么是设计模式 2 1.2设计模式的作用 3 1.3GRASP模式的分类 4 1.4GoF设计模式的分类 4 1.5模式的学习阶段 6 第2章负责任地设计对象——GRASP 9 2.1InformationExpert(信息专家) 11 2.2Creator(创造者)...

    深入浅出设计模式(中文版电子版)

    1.1什么是设计模式 2 1.2设计模式的作用 3 1.3GRASP模式的分类 4 1.4GoF设计模式的分类 4 1.5模式的学习阶段 6 第2章负责任地设计对象——GRASP 9 2.1InformationExpert(信息专家) 11 2.2Creator(创造者)...

    CreateCar(简单工厂模式)

    设计模式入门1——简单工厂模式(AudiFactory) http://blog.csdn.net/lynch0571/article/details/22925771

    Python设计模式之工厂方法模式实例详解

    本文实例讲述了Python设计...设计模式——工厂方法模式 工厂方法模式(Factory Method Pattern):定义一个用于创建对象的接口,让子类决定实例化哪一个类,工厂方法使一个类的实例化延时到其子类. 工厂方法模式克服了简单工

Global site tag (gtag.js) - Google Analytics