工厂模式--学习总结

Posted You295

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了工厂模式--学习总结相关的知识,希望对你有一定的参考价值。

工厂模式--学习总结

一:什么是工厂模式

工厂模式是java中最常用的设计模式之一,在工厂模式中,创建对象时不会对客户端暴露创建逻辑,并且只是通过一个共同的接口来指向新创建的对象。 定义一个创建对象的接口,让子类自己决定实例化哪一个工厂类,工厂模式使其过程延迟到子类进行。

二:代码实现

以人去餐馆吃午饭为例
1.传统的实现方式

public class FastFood  //第一种食物
      public void service() 
    	  System.out.println("麻婆豆腐....");
      

public class MiXian   //第二种食物
      public void service() 
    	  System.out.println("酸汤米线....");
      



public class Noddle 
      public void service()   //第三种食物
    	  System.out.println("老陕面....");
      


public class person   //实体对象

	public void eat() 
		Noddle service = new Noddle(); //吃老陕面
		service.service();
	



/**
 * 测试代码
 * 
 * @author DELL
 *
 */
public class TestFactory 

	@Test
	public void test() 
		person wang = new person();
		wang.eat();
	


原始的方法每次都要创建新的对象,要确定对象的替换类型

2.改进-面向接口的开发:创建接口,统一规范

/**
 * 创建接口
 * @author DELL
 *
 */
public interface Iservice 
	void service() ;
	


public class FastFood implements Iservice
	@Override
      public void service() 
    	  System.out.println("麻婆豆腐....");
      

public class MiXian implements Iservice
	@Override
      public void service() 
    	  System.out.println("酸汤米线....");
      

public class Noddle implements Iservice
	@Override
      public void service() 
    	  System.out.println("老陕面....");
      


public class person 

	public void eat() 
		Iservice service = new FastFood(); //吃老陕面
		service.service();
	


/**
 * 测试代码
 * 
 * @author DELL
 *
 */
public class TestFactory 

	@Test
	public void test() 
		person wang = new person();
		wang.eat();
	



此种方法每次对象去吃饭时创建一个对象,吃过后将对象进行销毁

3.改进–职责分离,解除依赖,使用工厂类来负责管理对象

public class FastFood implements Iservice
	@Override
      public void service() 
    	  System.out.println("麻婆豆腐....");
      

public class MiXian implements Iservice
	@Override
      public void service() 
    	  System.out.println("酸汤米线....");
      

public class Noddle implements Iservice
	@Override
      public void service() 
    	  System.out.println("老陕面....");
      

public class person 

	public void eat(int index) 
		FoodFactory.create(index).service();
	

/**
 * 接口
 * @author DELL
 *
 */
public interface Iservice 
	void service() ;
	

/**
 * 创建工厂类
 * @author DELL
 *
 */
public class FoodFactory 

	public static Iservice create(int index) 
		switch (index) 
		case 1:
			return new FastFood();

		case 2:
			return new MiXian();

		default:
			break;
		
		return new Noddle();
	


/**
 * 测试
 * @author DELL
 *
 */
public class TestFactory 

	@Test
	public void test() 
		person wang = new person();
		wang.eat(1);
	


4.改进–将工厂类进行改进,加上配置类

public class FastFood implements Iservice
	@Override
      public void service() 
    	  System.out.println("麻婆豆腐....");
      

public class MiXian implements Iservice
	@Override
      public void service() 
    	  System.out.println("酸汤米线....");
      


public class Noddle implements Iservice
	@Override
      public void service() 
    	  System.out.println("老陕面....");
      

public class person 

	public void eat() 
		FoodFactory.create().service();
	


public interface Iservice 
	void service() ;
	


/**
 * 改进后的工厂类
 * 
 * @author DELL
 *
 */
public class FoodFactory 

	public static Iservice create() 
		Iservice is = null;
		try 
			BufferedReader in = new BufferedReader(new FileReader("src/menu.txt"));
			String line = in.readLine();

			is = (Iservice) Class.forName("com.dyit.entity." + line).newInstance();

		 catch (Exception e) 
			e.printStackTrace();
		

		return is;
	


/**
 * 测试代码
 * 
 * @author DELL
 *
 */
public class TestFactory 

	@Test
	public void test() 
		person wang = new person();
		wang.eat();
	


三:工厂模式的优缺点

优点:1)一个调用者想创建一个对象,只要知道其名称就可以。
2)扩展性高,向增加产品,只要在扩展一个工厂类就可以
3)屏蔽产品的具体实现,调用者只关心产品的接口

缺点: 每次增加一个产品,都要增加一个具体的类和对象实现工厂,使得系统中类的个数成倍增加,在一定程度上增加了类的复杂度,同时也增加了系统类的具体依赖。

四:使用场景

1.日志记录器:记录可能记录到本地硬盘,系统事件,远程服务器等,用户可以选择记录日志到什么地方。
2.数据库访问:当用户不知道采用哪一类数据库,以及数据库可能发生变化时。
3.客户不关心创建产品的细节,只关乎品牌时。
4.创建对象的任务由多个具体子工厂中的某一个完成,而抽象工厂只提供创建产品的接口。

以上是关于工厂模式--学习总结的主要内容,如果未能解决你的问题,请参考以下文章

工厂模式--学习总结

工厂模式--学习总结

设计模式——工厂模式总结

设计模式学习笔记--简单工厂模式和工厂模式

Java中简单工厂模式,工厂模式,抽象工厂模式,策略模式和适配器模式学习

设计模式大杂烩(24种设计模式的总结及学习设计模式的几点建议)