Java---设计模块(工厂方法)

举报
谙忆 发表于 2021/05/27 14:43:58 2021/05/27
【摘要】 ★ 场景和问题 Java程序开发讲究面向接口编程,隐藏具体的实现类,可是如何得到接口呢? 工厂类的命名规范:***Factory 单例工厂方法的命名规范:getInstance() 工厂的本质是“选择实现” 工厂、接口和实现类之间的技术边界:工厂只负责选择实现,实现类才做真正的实现,而接口是限定到底实现什么东西和返回什么东西,三者之间分工明确、各负其责。 下...

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

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

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

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

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

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

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

实例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()"; } }

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

实例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()"; } }

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

工厂类 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; }

}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34

测试 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()方法已经被接口封装隔离了,访问不了 }

}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

a.properties文件里面的内容:
此为配置文件,修改配置文件不叫修改源代码的。

type=1

  
 
  • 1
  • 2

此时的输出结果为;

DepApi--Deplmpl1.t1()...

  
 
  • 1
  • 2

只修改配置文件:

type=2
  
 
  • 1

此时的输出结果为:

DepApi--Deplmpl2.t1()...

  
 
  • 1
  • 2

文章来源: chenhx.blog.csdn.net,作者:谙忆,版权归原作者所有,如需转载,请联系作者。

原文链接:chenhx.blog.csdn.net/article/details/51052677

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。