• 设计模式之工厂方法(Factory Method)


    package pkg.book;
    //工厂主要生产物品的抽象接口(该工厂主要生产书本)
    public interface Book {
    	public String name();
    	public int TotalPages();
    	public double price();
    }
    
    package pkg.book;
    //工厂生产数学书
    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;
    	}
    
    }
    
    package pkg.book;
    //工厂生产英语书
    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;
    	}
    }
    
    import pkg.book.Book;
    //利用了Java的反射机制来创造对象
    public class Factory {
    	//Class<? extends Book> 表示Class的泛型是全部继承自Book,所以所有的Book子类都可以传给Class<? extends Book> c
    	public static Book create(Class<? extends Book> c)
    	{
    		Book book = null;
    		try {
    			System.out.println("ClassName: "+c.getName());
    			//创建对象
    			book = (Book)Class.forName(c.getName()).newInstance();
    		} catch (Exception e) {
    			System.err.println("error to create book!");
    		} 
    		return book;
    	}
    }
    
    import pkg.book.EnglishBook;
    import pkg.book.MathBook;
    
    public class Main { //测试类
    	public static void main(String[] args) {
    		//直接通过XXX.class将类传入工厂
    		System.out.println(Factory.create(MathBook.class).name());
    		System.out.println(Factory.create(EnglishBook.class).name());
    	}
    }
    

    运行结果:

    ClassName: pkg.book.MathBook
    Math Book
    ClassName: pkg.book.EnglishBook
    English Book
    


    工厂方法相比与简单工厂显得更加的严整,而且工厂自身的创建新对象的方法变得很简单.
    客户端只需要指定一下自己想要创建的类,就可以让工厂去生产了。

    主要是Java的反射机制利用.

    项目源码地址:http://www.kuaipan.cn/file/id_132802506211221471.htm?source=1

  • 相关阅读:
    web基础(Myeclipse、IDEA新建Servlet工程)
    web基础(myeclipse新建web工程、tomcat服务器)
    http协议(http请求、响应、抓包、get和post请求)
    jsp(简介、脚本和注释、运行原理)
    类与对象(类、对象、对象的比较)
    变量(成员变量、局部变量)、堆栈
    目录的基本操作
    目录切换命令
    数组(一维数组、二维数组、与数组相关的函数)
    流程控制(顺序结构、条件语句、选择语句、循环语句)
  • 原文地址:https://www.cnblogs.com/vokie/p/3602097.html
Copyright © 2020-2023  润新知