工厂方法模式是对简单工厂模式的改进,克服了简单工厂模式不能很好的遵循开闭原则的缺点。工厂方法模式对工厂类进行了抽象化,并为每一种对应的产品创建一个对应的工厂类。当系统中引进了一种新的产品时,只需创建一个工厂类继承自工厂抽象类即可,无须对现有的系统做任何的修改。从而使系统满足了开闭原则的要求,提高了系统的可扩展性。
上一节的产品类是使用接口来进行抽象化操作的,其实使用抽象类来进行抽象化操作也是一样的。
这是抽像产品类
以下是抽象产品类的集成实现:
抽象工厂类:
产品A对应的工厂类:
产品B对应的工厂类:
最后就是得到产品了:
下一节,将对抽象工厂模式进行学习探讨。
上一节的产品类是使用接口来进行抽象化操作的,其实使用抽象类来进行抽象化操作也是一样的。
这是抽像产品类
package com.test;
public abstract class Product {
public abstract void action1();
public abstract void action2();
}
以下是抽象产品类的集成实现:
package com.test;
public class ProductA extends Product{
@Override
public void action1() {
System.out.println("ProductA action1");
}
@Override
public void action2() {
System.out.println("ProductA action2");
}
public void myOwnAction(){
System.out.println("ProductA myOwnAction");
}
}
package com.test;
public class ProductB extends Product{
@Override
public void action1() {
System.out.println("ProductB action1");
}
@Override
public void action2() {
System.out.println("ProductB action2");
}
}
抽象工厂类:
package com.test;
public abstract class Factory {
public abstract Product factory();
}
产品A对应的工厂类:
package com.test;
public class FactoryA extends Factory{
@Override
public Product factory(){
return new ProductA();
}
}
产品B对应的工厂类:
package com.test;
public class FactoryB extends Factory{
@Override
public Product factory(){
return new ProductB();
}
}
最后就是得到产品了:
package com.test;
public class Test {
public static void main(String args[]){
Factory fa = new FactoryA();
Factory fb = new FactoryB();
Product a = fa.factory();
Product b = fb.factory();
a.action1();
a.action2();
b.action1();
b.action2();
}
}
下一节,将对抽象工厂模式进行学习探讨。