研磨设计模式笔记(一)之简单工厂模式

简单工厂:工厂就是用来创造东西的,在java里面,通常是用来创造接口的,也可以创造抽象类,或是具体的类实例。

其本质是:选择实现

优点:帮助封装,真正面向接口编程;解耦-客户端根本不知道接口是由谁实现的。

下面就写一个简单的例子:

先定义一个USB的简单接口行为:

/** * * <p> * USB产品的行为接口 * </p> * <b>修改历史</b> * <ol> * <li>创建(Added by zengzhanghua on 2011-3-14)</li> * </ol> * @author zengzhanghua * @version 1.0 */ public interface UsbApi { public void readData(); public void writeData(); }

再定义一个具体的实现类:

public class AbcUsb implements UsbApi { @Override public void readData() { System.out.println("这是ABC USB读数据的实现方式"); } @Override public void writeData() { System.out.println("这是ABC USB写数据的实现方式"); } }

然后定义一个简单工厂类:

public class SimpleFactory { private SimpleFactory(){ } public static UsbApi createUsbApi(){ return new AbcUsb(); } }

客户端调用的例子:

public class Client { public static void main(String[] args){ //客户端并不知道具体实现,达到解耦的效果 UsbApi usbApi = SimpleFactory.createUsbApi(); usbApi.writeData(); } } 

 以上就是一个简单工厂的例子,当然如果要在该工厂中增加一种新的实现,要修改该工厂类,在里面增加一种得到其它实例的方法,当然解决这个问题,可以创建带参数的工厂类,如改为:

 public static UsbApi createUsbApi(int type){
        //根据类型返回相应的实例    }
}

当然还可以根据配置文件,利用反射来动态创建需要用到的实例等方式解决扩展问题。

你可能感兴趣的:(研磨设计模式笔记(一)之简单工厂模式)