★ 场景和问题

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. 一个非常有趣的算法程序(有趣只针对程序猿)就是Josephus问题

    大概花了一个晚上搭一个中午的时间,完善了一个关于Josephus的程序,这个Josephus游戏可是非常经典的算法,作为一个想从事软件的人最好能够理解一下,毕竟这个计算机教材上也讲过类似题目,具体的关 ...

  2. Windows7 64位系统搭建Cocos2d-x 2.2.1最新版以及Android交叉编译环境(具体教程)

    原文地址:http://blog.csdn.net/sttyytw/article/details/17005263 声明:本教程在參考了下面博文,并经过自己的摸索后实际操作得出,本教程系本人原创,因 ...

  3. ios开发应用内实现多语言自由切换

    需求描述:应用内部有一按钮,点击切换语言(如中英文切换).说起来这个是好久以前做的一个功能点了,刚开始也是没有头绪,后来解决了发现很简单,把方法分享一下.1.原理.查看NSLocalizedStrin ...

  4. 子查询in和表连接效率

    在数据查询时,尽量减少in子查询而使用表连接的方式进行,效率更高.

  5. 多表关联查询(ORACLE版)

    前言:这几天学习oracle,把自己对于关联查询的理解,记录下.如有错误请指正! 交叉连接: 交欢连接又称为“笛卡儿积连接”,是两个或多个表之间的无条件连接.一个表中所有的记录与其它表的所有的记录进行 ...

  6. Creating Lists and Cards 创建列表和卡片

    To create complex lists and cards with material design styles in your apps, you can use the Recycler ...

  7. 图片跟着鼠标动js

    <!DOCTYPE html><html><head> <title>duisgf</title> <meta charset=&qu ...

  8. JVM 内存分为四大块

    1.栈区 存放函数参数值和局部变量值 2.堆区 3.静态区 4.代码区

  9. UFLDL课程学习(二)

    章节地址:http://ufldl.stanford.edu/tutorial/supervised/LogisticRegression/ 章节名称:逻辑回归 (Logisitic Regressi ...

  10. JQuery 中的Ajax

    JQuery 对 Ajax 操作进行了封装, 在 jQuery 中最底层的方法时 $.ajax(), 第二层是 load(), $.get() 和 $.post(), 第三层是 $.getScript ...