设计模式-工厂模式

来源:互联网 发布:淘宝 乒乓球发球机 编辑:程序博客网 时间:2024/06/05 17:09

      工厂模式分为三种情况:简单工厂模式,工厂方法模式,抽象工厂模式,根据不同的场景选择相应的模式。

      简单工厂模式用于生产单一的产品,一般使用静态方法,根据传入的参数返回不同的对象实例。

      工厂方法模式,定义一个用于创建对象的接口,让子类决定创建哪个类,它使一个类型实例化延长到了子类。

      抽象方法模式,提供一系列创建相关或相互依赖对象的接口,而无需指定它们具体的类,通俗点说就是,一个工厂要生产多个产品,例如一个汽车厂要生产轮胎,生产照明灯,但是轮胎和照明灯又有不同的品牌。

简单工厂模式的实现

首先,一个Widget的接口,

public interface Widget {public void show();}
其次,一个4x1和一个4x2的widget,
public class FourOneWidget implements Widget {public void show() {System.out.println("4x1 widget");}}public class FourTwoWidget implements Widget {public void show() {System.out.println("4x2 wiget");}}
最后,来个创建Widget的工厂,
public class WidgetFactory {public static final String FOUR_ONE_TYPE = "4x1";public static final String FOUR_TWO_TYPE = "4X2";public static Widget createWidget(String type) {if(FOUR_ONE_TYPE.equals(type)) {return new FourOneWidget();} else if(FOUR_TWO_TYPE.equals(type)) {return new FourTwoWidget();}return null;}}
这样一个简单的工厂方法就实现了,我们可以调用WidgetFactory的static方法来创建不同的Widget,但是每次调用都需要修改代码,也就是传递的参数type。

工厂方法模式的实现

首先,Widget以及FourOneWidget,FourTwoWidget的代码都是一样的(工厂方法的重点不是产品,而是生产产品的方式-_-),在这里对工厂做了抽象,然后派生出两个分别生产4x1和4x2widget的工厂,代码如下:

public interface WidgetFactory {public Widget createFactory();}public class FourOneWidgetFactory implements WidgetFactory {public Widget createFactory() {return new FourOneWidget();}}public class FourTwoWidgetFactory implements WidgetFactory {public Widget createFactory() {return new FourTwoWidget();}}
这时候,我们再调用的时候就可以根据需求调用FourOneWidgetFactory或者FourTwoFactory了,而不用再修改代码。

抽象工厂方法的实现

首先一些需要生产的产品的类:

public interface Lamp {public void brand();}public class DZLamp implements Lamp {public void brand() {System.out.println("DZ Lamp");}}public class BMLamp implements Lamp {public void brand() {System.out.println("BM Lamp");}}public interface Wheel {public void brand();}public class DZWheel implements Wheel {public void brand() {System.out.println("DZ wheel");}}public class BMWheel implements Wheel {public void brand() {System.out.println("BM wheel");}}
然后是不同的工厂,
public abstract class BMFactory {public abstract Wheel createBMWhell();public abstract Lamp createBMLamp();}public class BMOneFactory extends BMFactory {public Wheel createBMWhell() {return new BMWheel();}public Lamp createBMLamp() {return new BMLamp();}}public abstract class DZFactory {public abstract Lamp createDZLamp();public abstract Wheel createDZWheel();}public class DZOneFactory extends DZFactory {public Lamp createDZLamp() {return new DZLamp();}public Wheel createDZWheel() {return new DZWheel();}}
最后,不同品牌的工厂生产相应的产品了。。





0 0