java设计模式之简单工厂设计模式

1.定义

提供一个创建对象实例的功能,而无须关心其具体实现.被创建实例的类型可以是接口,抽象类,也可以是具体的类.

 

 2.认识简单工厂

1).简单工厂的功能:-->可以用来创建接口,抽象类,或普通类的实例

2).静态工厂:-->通常把简单工厂类实现成一个工具类,直接使用静态方法就可以了,也就是说简单工厂的方法通常都是静态的,所以也被称为静态工厂

3).万能工厂:-->一个简单工厂理论上可以用来构造任何对象,所以又称之为“万能工厂”

3.简单工厂的命名

(1)类名建议为“模块名称+Factory”,比如:用户模块的工厂就称为:

UserFactory

(2)方法名称通常为“get+接口名称”或者是“create+接口名称”

(3)不建议把方法名称命名为“new+接口名称”

 4.代码实例

接口类:

/**
 * 接口类
 * @author Administrator
 *
 */
public interface Api {
    /**
     * 接口方法--本例为打印
     * @param str  要打印的字符串
     */
    public void execute(String str);
}

 

实现类A:

/**
 * 执行者A
 * @author Administrator
 *
 */
public class ExecuterA implements Api{

    @Override
    public void execute(String str) {
        System.out.println("hello world! i am "+str);
        
    }
    
}

 

 实现类B:

/**
 * 执行者B
 * @author Administrator
 *
 */
public class ExecuterB implements Api{

    @Override
    public void execute(String str) {
        System.out.println("hello world! i am "+str);
        
    }
    
}

 

 

工厂类:

/**
 * 执行者的工厂
 * @author Administrator
 *
 */
public class ExeFactory {
    
    /**
     * 创建execute
     * @param exeName  执行者的名字
     * @return  execute的实例
     */
    public static Api buildExe(String exeName) {
        if("A".equals(exeName))return new ExecuterA();
        if("B".equals(exeName))return new ExecuterB();
        return new ExecuterA();//默认创建执行者A
    }
}

 

 

客户端类:

/**
 * 客户端
 * @author Administrator
 *
 */
public class Client {
    public static void main(String[] args) {
         ExeFactory.buildExe("A").execute("TomcatA");
         ExeFactory.buildExe("B").execute("TomcatB");
    }
}

 

 

结果:

hello world! i am TomcatA
hello world! i am TomcatB

 

 

5.总结

什么时候选择简单工厂?

1).完全的封装具体隔离,外部只能通过接口访问

2).想要对象的集中管理

 

posted @ 2017-12-25 15:17  vlime  阅读(181)  评论(0编辑  收藏  举报