★ 场景和问题

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. 学习之路十四:客户端调用WCF服务的几种方法小议

    最近项目中接触了一点WCF的知识,也就是怎么调用WCF服务,上网查了一些资料,很快就搞出来,可是不符合头的要求,主要有以下几个方面: ①WCF的地址会变动,地址虽变,但是里面的逻辑不变! ②不要引用W ...

  2. Android学习–Android app 语言切换功能

    功能: app用户根据自己的语言喜好,设置app语言.语言设置只针对本app,并在下次启动应用时保留前一次启动设置. 更新语言: public static void changeAppLanguag ...

  3. Java基础知识强化77:正则表达式之获取功能(Pattern 和 Matcher类的使用)

    1. 获取功能: Pattern 和 Matcher类结合使用 2. 使用案例: package cn.itcast_05; import java.util.regex.Matcher; impor ...

  4. hdu 5105

    题意: y=|a*x^3+b*x^2+c*x+d|    求y的最大值? 题目是bc上的,之前写的时候,没考虑0的情况(太笨了).... 水题吧.... AC代码: #include <iost ...

  5. JAVA关键词synchronized的作用

    记下来,很重要. Java语言的关键字,当它用来修饰一个方法或者一个代码块的时候,能够保证在同一时刻最多只有一个线程执行该段代码. 一.当两个并发线程访问同一个对象object中的这个synchron ...

  6. iOS中如何使状态栏与下面的搜索栏或NavigationBar或toolBar颜色一致

    在iOS7之后,status bar是透明的(transparent),navigation bars,tab bars,toolbars,search bars 和 scope bars 是半透明的 ...

  7. Swift和OC混编时, 关于@objc的作用

    Objective-C 和 Swift 在底层使用的是两套完全不同的机制,Cocoa 中的 Objective-C 对象是基于运行时的,它从骨子里遵循了 KVC (Key-Value Coding,通 ...

  8. oracle sql语句中使用if逻辑

    l在 SQL 语句中使用IF-THEN-ELSE 逻辑 l l使用两种方法: •CASE 表达式:SQL99的语法,类似Basic,比较繁琐 •DECODE 函数:Oracle自己的语法,类似Java ...

  9. QT学习:入门篇(三)

    头文件: #ifndef CChatDisplaySet_h #define CChatDisplaySet_h #include "QtGui/QDialog" #include ...

  10. 移动端(html5)微信公众号下用keyup实时监控input值的变化无效

    搜索框依据用户输入的值实时检索,一开始自然而然想到keyup,在拼音状态时,啥问题也没有, 问题1:切换到中文输入法,问题出来了,keyup事件不灵便了,后来在网上搜了下,找到了思路, 问题2:微信公 ...