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

  • 相关阅读:
    一个老码农对职场的思考
    PHP算法 (冒泡 选择排序 折半查找 顺序查找 斐波那契数列 素数 )
    php 图像的基本操作
    php 随机字符串 验证码
    php中 var_dump 和 echo 和 print_r() 和 print
    正则表达式的整理
    php上传文件原理
    git 几个简单命令
    git 几个简单命令
    会话技术Cookie
  • 原文地址:https://www.cnblogs.com/vokie/p/3602097.html
Copyright © 2011-2022 走看看