zoukankan      html  css  js  c++  java
  • 设计模式之简单工厂(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

  • 相关阅读:
    【故障处理】ORA-12162: TNS:net service name is incorrectly specified (转)
    android studio 编程中用到的快捷键
    java时间格式串
    android Error occurred during initialization of VM Could not reserve enough space for object heap Could not create the Java virtual machine.
    linux安装vmware
    x1c 2017 安装mint18的坑——grub2
    x1c2017 8G版 win linux的取舍纠结记录
    python的try finally (还真不简单)
    kafka+docker+python
    json文件不能有注释
  • 原文地址:https://www.cnblogs.com/vokie/p/3602098.html
Copyright © 2011-2022 走看看