工厂模式--学习总结
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.创建对象的任务由多个具体子工厂中的某一个完成,而抽象工厂只提供创建产品的接口。
以上是关于工厂模式--学习总结的主要内容,如果未能解决你的问题,请参考以下文章