工厂模式

来源:互联网 发布:网络赌球犯法吗 编辑:程序博客网 时间:2024/06/16 17:18

工厂模式的概念:

实例化对象,用工厂方法代替new操作,包括工厂方法模式和抽象工厂模式,抽象工厂模式是工厂方法模式的扩展。

定义一个接口来创建对象,但是让子类来决定哪些类需要被实例化。工厂方法把实例化的工作推迟到子类中去实现。

什么情况下适合工厂模式:

有一组类似的对象需要创建

在编码时不能预见需要创建哪种类的实例

系统需要考虑扩展性,不应依赖于产品类实例如何被创建、组合和表达的细节

例子:

接口:发型

实现类:左分,右分

工厂类:创建getHair()方法根据需求返回相应的实例,可以通过new或反射的方式返回实例。

public class HairFactory {
public HairInterface getHair(String key){
if ("left".equals(key)) {
return new LeftHair();
}else if ("right".equals(key)) {
return new RightHair();
}else {
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;
}
}

测试类:

public class MyTest {
public static void main(String[] args){
// HairInterface left = new LeftHair();
// left.draw();
HairFactory factory =new HairFactory();
// HairInterface left = factory.getHair("left");
// left.draw();

HairInterface left = factory.getHairByClass("com.dejun.factory.LeftHair");
left.draw();
}
}

抽象工厂和工厂方法的区别主要在于,抽象工厂是对多个产品。即工厂方法是一个接口下的不同类,而抽象工厂方法是对多个接口下的多个抽象类,在

利用工厂模式:

系统可以在不修改具体工厂角色的情况下引进新的产品

客户端不必关心对象如何创建,明确了职责

更好的理解面向对象的原则 面向接口编程 而不要面向实现编程


1 0
原创粉丝点击