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

  • 相关阅读:
    基于Ubuntu Jeos打造自己的精简版Linux服务器
    35 vs 53怎么裁
    父母在,不远游
    linux deepin是基于linux mint修改
    novell
    Sahi
    virtualbox on windows store vdi on ndfs due the file will bigger than 4gb
    在Linux下配置邮件系统
    CSS3 backgroundsize 属性
    dede:list及dede:arclist 按权重排序的方法
  • 原文地址:https://www.cnblogs.com/vokie/p/3602098.html
Copyright © 2011-2022 走看看