为什么要用简单工厂

1.什么是简单工厂:

       简单工厂模式是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式,但不属于23种GOF设计模式之一。使用简单工厂就是定义了一个创建对象的类,由这个类来封装实例化对象的行为。

2.为什么要用简单工厂:

        举例,如果我们要实现从控制台输入数据,根据输入的数据不同生成不同的书籍,例如输入C生成C_book,输入java生成Java_Book.

2.1不使用简单工厂模式


Book.java

public interface Book {
	public void read();
}
C_Book.java

public class C_Book implements Book {

	@Override
	public void read() {
		System.out.println("读C语言从入门到入土");
	}

}
Java_Book.java

public class Java_Book implements Book {

	@Override
	public void read() {
		System.out.println("读java从入门到入土");
	}

}
Error_Book.java

public class Error_Book implements Book {

	@Override
	public void read() {
		System.out.println("ERROR");
	}

}
Client.java

import java.util.Scanner;

public class Client {
	
	public static void main(String[] args) {
		Scanner scan = new Scanner(System.in);
		String type;
		Book book;
		type = scan.nextLine();
		switch (type) {
		case "C":
			book = new C_Book();
			break;
		case "Java":
			book = new Java_Book();
			break;
		default:
			book = new Error_Book();
			break;
		}
		book.read();
		scan.close();
	}	

}

2.2使用简单工厂模式


SimpleFactory_Book.java

public class SimpleFactory_Book {
	Book createBook(String type){
		switch (type) {
		case "C":
			return new C_Book();
		case "Java":
			return new Java_Book();
		default:
			return new Error_Book();
		}
	}
}

Client.java

import java.util.Scanner;

public class Client {
	
	public static void main(String[] args) {
		Scanner scan = new Scanner(System.in);
		SimpleFactory_Book sFactory = new SimpleFactory_Book();
		String type;
		Book book;
		type = scan.nextLine();
		book = sFactory.createBook(type);
		book.read();
		scan.close();
	}	

}


        在客户端代码进行输入,通过switch创建相应类型的书是完全没有问题的。为什么要单独分出来一个类来进行对象的创建呢?这是因为要考虑到代码的可修改性与可读性。在不使用简单工厂的客户端代码中,如果增加一种类型的书,需要修改其中的switch语句,而其后的操作是不需要修改的。针对代码优化进行解耦,就要分离其中的变化部分以及不变的部分。当不使用简单工厂类进行创建对象时,需要从客户端中使用switch的代码中直接修改。如果主函数中使用switch的代码地方过多,需要全部修改,这就很容易漏掉某个地方,忘记修改,从而造成程序错误。简单工厂模式就是将这部分创建对象语句分离出来,由这个类来封装实例化对象的行为,修改时只需要修改类中的操作代码,使用时调用该类不需要考虑实例化对象的行为,使得后期代码维护升级更简单方便。

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值