工厂模式概念:
1.实力化对象,用工厂方法代替new操作
2.工厂模式包括工厂方法模式和抽象工厂模式
3.抽象工厂模式是工厂方法模式的扩展
工厂模式的意图:
1.定义一个接口来创建对象,但是让子类来决定哪些类需要被实例化
2.工厂方法把实例化的工作推迟到子类中去实现
适合工厂模式的场景:
1.有一组类似的对象需要创建
2.在编码是不能预见需要创建那种类的实例
3.系统需要考虑扩展性,不应依赖于产品实例如何被创建、组合和表达细节。
工厂方法模式和抽象工厂模式对比
1.工厂模式是一种极端情况的抽象工厂模式,re抽象工厂模式可以看做工厂模式的推广
2.工厂模式用来创建一个产品的等级结构,而抽象工厂模式是用来创建多个产品的等级结构
3).创建工厂
4).主线程调用
1.实力化对象,用工厂方法代替new操作
2.工厂模式包括工厂方法模式和抽象工厂模式
3.抽象工厂模式是工厂方法模式的扩展
工厂模式的意图:
1.定义一个接口来创建对象,但是让子类来决定哪些类需要被实例化
2.工厂方法把实例化的工作推迟到子类中去实现
适合工厂模式的场景:
1.有一组类似的对象需要创建
2.在编码是不能预见需要创建那种类的实例
3.系统需要考虑扩展性,不应依赖于产品实例如何被创建、组合和表达细节。
工厂方法模式和抽象工厂模式对比
1.工厂模式是一种极端情况的抽象工厂模式,re抽象工厂模式可以看做工厂模式的推广
2.工厂模式用来创建一个产品的等级结构,而抽象工厂模式是用来创建多个产品的等级结构
3.工厂模式只是一个抽象产品类,二抽象工厂模式有多个产品抽象类
示例代码:
1).首先创建产品接口
public interface HairInterface {
void draw();
}
2).实现产品接口
public class RedHair implements HairInterface {
@Override
public void draw() {
System.out.println("this is the red hair");
}
}
public class BlackHair implements HairInterface {
@Override
public void draw() {
System.out.println("this black hair");
}
}
3).创建工厂
public class HairFactory {
/*
* 根据类的包名来生产对象
* */
public HairInterface getHairByClass(String className){
try {
HairInterface hair = (HairInterface) Class.forName(className).newInstance();
return hair;
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
return null;
}
public HairInterface getHairByClass(Class aClass){
try {
HairInterface hair = (HairInterface) aClass.newInstance();
return hair;
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
return null;
}
}
4).主线程调用
HairFactory factory = new HairFactory();
HairInterface blackHair = factory.getHairByClass("mobi.futoubang.factory.BlackHair");
blackHair.draw();
HairInterface redHair = factory.getHairByClass(RedHair.class);
redHair.draw();