工厂方法模式是对简单工厂模式的改进,克服了简单工厂模式不能很好的遵循开闭原则的缺点。工厂方法模式对工厂类进行了抽象化,并为每一种对应的产品创建一个对应的工厂类。当系统中引进了一种新的产品时,只需创建一个工厂类继承自工厂抽象类即可,无须对现有的系统做任何的修改。从而使系统满足了开闭原则的要求,提高了系统的可扩展性。
上一节的产品类是使用接口来进行抽象化操作的,其实使用抽象类来进行抽象化操作也是一样的。
这是抽像产品类
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(); } }
下一节,将对抽象工厂模式进行学习探讨。
上一节的产品类是使用接口来进行抽象化操作的,其实使用抽象类来进行抽象化操作也是一样的。
这是抽像产品类
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(); } }
下一节,将对抽象工厂模式进行学习探讨。