工厂模式概念:实例化对象,用工厂模式代替new操作
工厂模式包括工厂方法模式和抽象工厂模式
抽象工厂模式是工厂方法模式的扩展
工厂模式的意图:定义一个接口来创建对象,但让子类决定哪些类需要被实例化。
工厂方法把实例化的工作推迟到子类中去实现。
工厂方法模式类图

package com.fyf;
/**
* 发型接口
* @author 18401
*
*/
public interface HairInterface {
//实现了发型
public void draw();
}
package com.fyf;
/**
* 发型工厂
* @author 18401
*
*/
public class HairFactory {
/**
* 根据类型来创建对象
*/
public HairInterface getHair(String key){
if("left".equals(key)){
return new LetfHair();
}else if("right".equals(key)){
return new RightHair();
}
return null;
}
public HairInterface getHairByClass(String className){
try {
HairInterface hair = (HairInterface) Class.forName(className).newInstance();
return hair;
} catch (InstantiationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
}
package com.fyf;
/**
* 左偏分发型
* @author 18401
*
*/
public class LetfHair implements HairInterface {
/**
* 画了一个左偏分
*/
@Override
public void draw() {
// TODO Auto-generated method stub
System.out.println("----左偏分发型-----");
}
}
package com.fyf;
/**
* 右偏分发型
* @author 18401
*
*/
public class RightHair implements HairInterface {
/**
* 画了一个右偏分
*/
@Override
public void draw() {
// TODO Auto-generated method stub
System.out.println("----右偏分发型-----");
}
}
package com.fyf;
public class Test {
//客户端
public static void main(String[] args) {
// HairInterface left = new LetfHair();
// left.draw();
HairFactory factory = new HairFactory();
// HairInterface left = factory.getHair("left");
// left.draw();
HairInterface left = factory.getHairByClass("com.fyf.LetfHair");
left.draw();
}
}