设计模式之简单工厂(Simple Factory)

//工厂主要生产物品的抽象接口(该工厂主要生产书本)
public interface Book {
	public String name();
	public int TotalPages();
	public double price();
}
//工厂生产数学书
public class MathBook implements Book{

	@Override
	public int TotalPages() {
		return 200;
	}

	@Override
	public String name() {
		return "Math Book";
	}

	@Override
	public double price() {
		return 17.5;
	}

}
//工厂生产英语书
public class EnglishBook implements Book{
	@Override
	public int TotalPages() {
		return 153;
	}

	@Override
	public String name() {
		return "English Book";
	}

	@Override
	public double price() {
		return 23.2;
	}
}
//简单工厂类
//缺点在于每次增加一个种类的新书,都需要在工厂类里面写一下配置。
//优点是将对象的创建与测试端分离,对测试端隐藏了对象的具体创建过程
public class Factory {
	public static Book create(String bookName)
	{//根据书名生产相应的书籍
		Book book = null;
		if(bookName.equalsIgnoreCase("Math"))
		{
			book = new MathBook();
		}
		else if(bookName.equalsIgnoreCase("English"))
		{
			book = new EnglishBook();
		}
		return book;
	}
}
public class Main { //测试类
	public static void main(String[] args) {
		Book book = Factory.create("English");
		if(book != null)
			System.out.println("Name:"+book.name()+"
Price:"+book.price());
		else 
			System.out.println("Cannot create the Book");
		
		book = Factory.create("Math");
		if(book != null)
			System.out.println("Name:"+book.name()+"
Price:"+book.price());
		else 
			System.out.println("Cannot create the Book");
		
		book = Factory.create("News");
		if(book != null)
			System.out.println("Name:"+book.name()+"
Price:"+book.price());
		else 
			System.out.println("Cannot create the Book");
	}
}

运行结果:

Name:English Book
Price:23.2
Name:Math Book
Price:17.5
Cannot create the Book


简单工厂模式主要是为了程序的解耦和,如果程序中有很多个地方使用了new MathBook(),以后由于程序修改的原因,MathBook类要重新改名成MathNews;
那我们就需要把所有关于new MathBook()的地方全部修改一次,这样做是不符合软件设计的原则的。

然后就是工厂向客户隐藏了具体的细节,用户需要什么书,工厂负责生产出对应的书就好了,用户不需要知道具体生产书本的细节。


项目下载链接:http://www.kuaipan.cn/file/id_132802506211221470.htm?source=1

原文地址:https://www.cnblogs.com/vokie/p/3602098.html