首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

工场模式(工厂方法)

2012-12-19 
工厂模式(工厂方法)简单工厂的缺点就是扩展性不强,当有新的类型产生的时候,将对负责生产的主类进行修改。主

工厂模式(工厂方法)

简单工厂的缺点就是扩展性不强,当有新的类型产生的时候,将对负责生产的主类进行修改。主类负责太多的业务逻辑,要避免这种情况的产生,就是将生产类功能抽象化。还是以上文中的水果为例子:

水果接口:

package 工厂模式.工厂方法;

public interface Fruit {

?void grow();
?void harvest();
?void plant();
}

苹果:

package 工厂模式.工厂方法;

public class Apple implements Fruit {

?public void grow() {
??System.out.println("apple grow");

?}

?public void harvest() {
??System.out.println("apple harvest");

?}

?public void plant() {
??System.out.println("apple plant");

?}

}
香蕉:

package 工厂模式.工厂方法;

public class Banana implements Fruit {

?public void grow() {
??System.out.println("Banana grow");

?}

?public void harvest() {
??System.out.println("Banana harvest");

?}

?public void plant() {
??System.out.println("Banana plant");
?}

}
生产工厂(农夫)

package 工厂模式.工厂方法;

public interface FruitGardener {
?
?public? Fruit factory();


}
这个类和简单工厂的农夫类有很大的不同,区别就在这个类将生产的功能抽象化了,继而产生的是生产各种水果的工厂,例如生产苹果,不由农夫生产了,而是由农夫生产苹果共产,由苹果工厂去生产苹果。这种做法的扩展性非常的强。

苹果工厂:

package 工厂模式.工厂方法;

public class AppleGardener implements FruitGardener {

?public Fruit factory() {
??// TODO Auto-generated method stub
??return new Apple();
?}

}
香蕉工厂:

package 工厂模式.工厂方法;

public class BananaGardener implements FruitGardener {

?public Fruit factory() {
??// TODO Auto-generated method stub
??return new Banana();
?}

}

客户端:

package 工厂模式.工厂方法;

public class Client {

?public static void main(String[] args) {
??FruitGardener applegardener = new AppleGardener();
??Apple apple = (Apple) applegardener.factory();
??apple.plant();

?}

}

工厂方法灵活运用了继承的原理,通过客户要生产什么类型的水果,从而去拿具体生产水果的实例工厂。如果系统需要加入一个新的产品,那么所需要的就是向系统中加入一个这个产品的对应的工厂类,没必要去修改客户端。完全支持开闭原则。

?

热点排行