★ 场景和问题

Java程序开发讲究面向接口编程,隐藏具体的实现类,可是如何得到接口呢?

工厂类的命名规范:***Factory

单例工厂方法的命名规范:getInstance()

工厂的本质是“选择实现”

工厂、接口和实现类之间的技术边界:工厂只负责选择实现,实现类才做真正的实现,而接口是限定到底实现什么东西和返回什么东西,三者之间分工明确、各负其责。

下面为简单的工厂方法介绍和源代码:

接口DepApi :

package cn.hncu.pattern.factory.dep;
//接口
public interface DepApi {
public String t1();
}

实例1 Deplmpl1 :

package cn.hncu.pattern.factory.dep;

public class Deplmpl1 implements DepApi{

    @Override
public String t1() {
System.out.println("DepApi--Deplmpl1.t1()...");
return "Deplmpl1_t1()";
} //下面这个方法在外面访问不到,因为被接口隔离了
public String t2() {
System.out.println("DepApi--Deplmpl1.t2()...");
return "Deplmpl1_t2()";
} }

实例2 Deplmpl2 :

package cn.hncu.pattern.factory.dep;

public class Deplmpl2 implements DepApi{

    @Override
public String t1() {
System.out.println("DepApi--Deplmpl2.t1()...");
return "Deplmpl2_t1()";
} //下面这个方法在外面访问不到,因为被接口隔离了
public String t2() {
System.out.println("DepApi--Deplmpl2.t2()...");
return "Deplmpl2_t2()";
} }

工厂类 DepFactory :

package cn.hncu.pattern.factory.dep;

import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties; //工厂真正的作用是:选择实现
public class DepFactory { // 工厂方法,命名规范:createDepApi,getDepApi,getDepInstance
public static DepApi getDepApi(){
Properties p = new Properties();
int type=1;
InputStream inStream;
try {
inStream = new FileInputStream("a.properties");
p.load(inStream);
type = Integer.parseInt(p.getProperty("type"));
} catch (IOException e) {
e.printStackTrace();
} if(type==1){
return new Deplmpl1();
}
if(type==2){
return new Deplmpl2();
}
return null;
} }

测试 Client :

package cn.hncu.pattern.factory;

import cn.hncu.pattern.factory.dep.DepApi;
import cn.hncu.pattern.factory.dep.DepFactory; public class Client {
public static void main(String[] args) { DepApi da = DepFactory.getDepApi();
da.t1();//修改配置文件a.properties就可达到修改调用方法的目的,而不用修改源代码
//da.t2(); //实现类当中的t2()方法已经被接口封装隔离了,访问不了
} }

a.properties文件里面的内容:

此为配置文件,修改配置文件不叫修改源代码的。

type=1

此时的输出结果为;

DepApi--Deplmpl1.t1()...

只修改配置文件:

type=2

此时的输出结果为:

DepApi--Deplmpl2.t1()...

Java---设计模块(工厂方法)的更多相关文章

  1. java设计模式之工厂方法探究

    简单工厂 + 工厂方法 + 抽象工厂       看了十几篇博客,每篇基本上都能有个自己的解释,我汇总这些内容,重新梳理整理了一番,以形成自己的理解.       简单工厂模式其实不算23种设计模式之 ...

  2. Java设计模式之工厂方法模式(转) 实现是抽象工厂?

    Java设计模式之工厂方法模式 责任编辑:覃里作者:Java研究组织   2009-02-25   来源:IT168网站   文本Tag: 设计模式 Java [IT168 技术文章]         ...

  3. JAVA设计模式之工厂方法模式

    在阎宏博士的<JAVA与模式>一书中开头是这样描述工厂方法模式的: 工厂方法模式是类的创建模式,又叫做虚拟构造子(Virtual Constructor)模式或者多态性工厂(Polymor ...

  4. Java 设计模式(四)-工厂方法模式 (FactoryMethod Pattern)

    1     概念定义 1.1   定义 定义一个用于创建对象的接口,让子类决定实例化哪一个类.工厂方法使一个类的实例化延迟到其子类. 1.2   类型 创建类模式 2     原理特征 2.1   类 ...

  5. Java设计模式系列-工厂方法模式

    原创文章,转载请标注出处:<Java设计模式系列-工厂方法模式> 一.概述 工厂,就是生产产品的地方. 在Java设计模式中使用工厂的概念,那就是生成对象的地方了. 本来直接就能创建的对象 ...

  6. 设计模式之java源码-工厂方法模式

    工厂方法模式 8.1 女娲造人的故事 东汉<风俗通>记录了一则神话故事:“开天辟辟,未有人民,女娲搏,黄土作人……”,讲述的内容就是大家非常熟悉的女娲造人的故事.开天辟地之初,大地上并没有 ...

  7. java设计模式(二)---工厂方法模式

    2普通工厂方法模式 就是建立一个工厂类,对实现了同一接口的一些类进行实例的创建. 2.1创建接口 /** * 发送接口 * Created by mrf on 2016/2/25. */ public ...

  8. Java设计模式 之 工厂方法模式

    1. 使用设计模式的好处:可提高代码的重复性,让代码更容易被他人理解,保证代码的可靠性. 2. 工厂模式定义:就是创建一个工厂类来创建你需要的类,工厂模式包括工厂模式和抽象工厂模式,抽象工厂模式是工厂 ...

  9. Java 的静态工厂方法

    本文转载自:https://www.jianshu.com/p/ceb5ec8f1174 序:什么是静态工厂方法 Effective Java 2.1 静态工厂方法与构造器不同的第一优势在于,它们有名 ...

随机推荐

  1. [AngularJS] angular-md-table for Angular material design

    Download from npm:https://www.npmjs.com/package/angular-md-table +: Responsive: Has both Mobile view ...

  2. POJ 2044 Weather Forecast

    意甲冠军:有一2*2云,而一个4*4范围.在当天密布区必须有雨.有云4招式种类 .期间希望不要下雨,并且一个地方不能有连续7天没下雨. 思路:首先解决一个地方不能有连续7天没下雨的情况,要让地图上的全 ...

  3. jQuery 第一阶段 学习使用总结

    jQuery 是一个 JavaScript 库,位于一个 JavaScript 文件中,其中包含了所有的 jQuery 函数.在平常的使用过程中,会常常与JavaScript,配合css使用,能够令网 ...

  4. 在Blade中结合gperftools检查内存泄露

    Blade是我们开发的大规模C++项目构建工具. gperftools是google开发的性能工具,由高效内存分配器,CPU性能分析器,堆分析器,堆检查器等工具组成. 和其他构建工具不同,结合gtes ...

  5. pod install后出现: [!] `<PBXResourcesBuildPhase UUID=`xxxx`>` attempted to initialize an object with an unknown UUID

    [!] `<PBXResourcesBuildPhase UUID=`xxx`>` attempted to initialize an object with an unknown UU ...

  6. hdu1025 最长不下降子序列nlogn算法

    C - DP Crawling in process... Crawling failed Time Limit:1000MS     Memory Limit:32768KB     64bit I ...

  7. code:blocks 编译环境设置

    1.  支持C99 在菜单settings->compiler settings->comiler settings->Other options 添加: -std=c99 2. 支 ...

  8. bat 小工具

    @echo ************************************************************************:start@echo offset /p ...

  9. Extjs中grid表头内容居中

    在每一列中加上header属性即可,源码: header:'<div style=" text-align: center; vertical-align: middle;" ...

  10. wordpress主题制作结构文件

    下面是WordPress主题文件层次结构,它会告诉你:当WordPress显示特定的页面类型时,会使用哪个模板文件呢?只有了解了以下主题层次结构,你才能知道你的WordPress主题到底需要写哪些文件 ...