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

  • 相关阅读:
    第三节 单因素方差分析
    第四十一节 ORM介绍和用元类实现
    第四十节 通过type创建复杂的类,元类应用
    第二节 检验方法使用条件考察
    HDFS HA误删namenode后报错Nameservice testCluster has no SecondaryNameNode or High-Availability partner的恢复
    spark sql cache时发现的空字符串问题
    centos7环境下ELK部署之elasticsearch
    CDH升级 5.7.5 --> 5.13.3(tar包方式)
    CDH部署(以5.7.5为例)
    人生苦短,Let's Go
  • 原文地址:https://www.cnblogs.com/vokie/p/3602098.html
Copyright © 2011-2022 走看看