• 静态工厂模式


    静态工厂模式就是用静态方法实现的,其创建的对象具有一定的特性,譬如说是某类的派生或者某接口的实现;如:

    Animal 类:
    package shejimoshi.factoryMoShi.staticFactory;
    
    public abstract class Animal {
    	private String name;
    
    	public Animal() {
    		super();
    		// TODO Auto-generated constructor stub
    	}
    
    	public Animal(String name) {
    		super();
    		this.name = name;
    	}
    
    	public abstract void eat();
    
    	public String getName() {
    		return name;
    	}
    
    	public void setName(String name) {
    		this.name = name;
    	}
    }
    

    Cat 类

    package shejimoshi.factoryMoShi.staticFactory;
    
    public class Cat extends Animal {
    
    	public Cat() {
    		// TODO Auto-generated constructor stub
    	}
    
    	public Cat(String name) {
    		super(name);
    		// TODO Auto-generated constructor stub
    	}
    
    	@Override
    	public void eat() {
    		System.out.println("I like to eat fish!");
    	}
    
    }
    

      

    Dog 类:

    package shejimoshi.factoryMoShi.staticFactory;
    
    public class Dog extends Animal {
    
    	public Dog() {
    		// TODO Auto-generated constructor stub
    	}
    
    	public Dog(String name) {
    		super(name);
    		// TODO Auto-generated constructor stub
    	}
    
    	@Override
    	public void eat() {
    		System.out.println("I like to eat bone!");
    	}
    
    }
    

      

    StaticFactory 类:

    package shejimoshi.factoryMoShi.staticFactory;
    
    /**
     * 静态工厂创建一个对象 静态工厂类产生的对象一般都有共同的特性,继承某一类,或者引用接口之类,在此
     * 没有看似没有,但不可否认他们都是Object或者Object的一个子类
     */
    public class StaticFactory {
    	public static Object getInstance(String className) {
    		if ("英短".equals(className)) {
    			return new Cat();
    		} else if ("拉布拉多".equals(className)) {
    			return new Dog();
    		} else {
    			return null;
    		}
    	}
    
    	/*public static Object getInstance(String className, Object... agrs) {
    		Class cls = null;
    		try {
    			cls = Class.forName(className);
    		} catch (ClassNotFoundException e1) {
    			// TODO Auto-generated catch block
    			return null;
    		}
    		Constructor[] constructors = cls.getConstructors();
    		Object instance = null;
    		for (Constructor cons : constructors) {
    			Class<?>[] clses = cons.getParameterTypes();
    			if (clses.length > 0) {
    				boolean isThisConstructor = true;
    				for (int i = 0; i < clses.length; i++) {
    					Class c = clses[i];
    					if (!c.isInstance(agrs[i])) {
    						isThisConstructor = false;
    					}
    				}
    				if (isThisConstructor) {
    					try {
    						instance = cons.newInstance(agrs);
    						break;
    					} catch (IllegalArgumentException e) {
    						// TODO Auto-generated catch block
    						e.printStackTrace();
    					} catch (InvocationTargetException e) {
    						// TODO Auto-generated catch block
    						e.printStackTrace();
    					} catch (InstantiationException e) {
    						// TODO Auto-generated catch block
    						e.printStackTrace();
    					} catch (IllegalAccessException e) {
    						// TODO Auto-generated catch block
    						e.printStackTrace();
    					}
    				} else {
    					continue;
    				}
    
    			}
    		}
    		return instance;
    	}*/
    }
    

      

    Test 类:

    package shejimoshi.factoryMoShi.staticFactory;
    
    public class Test {
    	public static void main(String[] args) {
    		//调用getInstance()方法,返回的是一个cat/dog对象
    		Cat cat = (Cat) StaticFactory.getInstance("英短");
    		cat.eat();
    		System.out.println(cat);
    	}
    }
    

      

      

  • 相关阅读:
    for xml path(''),root('')
    [小明带你玩儿Photon]4.一起来看日志
    [小明带你玩儿Photon]3.Hello World i
    [小明带你玩儿Photon]2.从零开始一个程序
    [小明带你玩儿Photon]1.Photon介绍
    杂记
    FluentNHibernate初探[1]
    [Navigation]Navigation初探[2]
    [Navigation]Navigation初探[1]
    动画系统的animator
  • 原文地址:https://www.cnblogs.com/qqyong123/p/8520544.html
Copyright © 2020-2023  润新知