文档章节

java设计模式第一篇-简单工厂模式

e代宗师
 e代宗师
发布于 2013/12/30 20:17
字数 517
阅读 45
收藏 0

工厂模式解决的问题:如何在java应用开发中实现“面向接口编程”。

接口的用途:通常使用接口来定义实现类的外观,即实现类的行为定义,用来约束实现类的行为。

接口的思想:封装隔离。

使用接口的好处:内部实现和外部调用实现了隔离,只要接口不变,无论内部实现如何改变,都不会导致外部调用的改变。“接口是系统可插拔性的保证”。

1.不用模式的解决方案

接口类:

   1:  public interface Api{
   2:      public void operation();
   3:  }

 

接口的实现类:

   1:  public class Impl implements Api{
   2:      public void operation(){
   3:          System.out.println("Impl");
   4:      }
   5:  }

 

 使用接口类:

   1:   public class Client{

 

   2:        public static void main(String[] args){

 

   3:            Api api = new Impl();

 

   4:           api.operation();

 

   5:       }

 

   6:    }

可见,Impl类仍然暴露给了客户端。

2.使用工厂模式的解决方案

接口类和接口的实现类不变,增加简单工厂类Factory

   1:  public class  Factory{
   2:      public static Api createApi(int condition){
   3:          if(1 == condition){
   4:               return new Impl();
   5:          }else{
   6:              return null;//或者其他ImplA();
   7:          }
   8:      }
   9:  }

 

使用工厂类后,客户端对接口的使用:

   1:  public class Client{
   2:      public static void main(String[] args){
   3:          Api api = Factory.createApi();
   4:          api.operator();
   5:      }
   6:  }

 

使用工厂类后,就实现了接口具体实现的封装,客户端就看不到接口内部的具体实现了,完全体现了接口的“封装隔离”。

3.如果工厂有不同的实现类,在工厂中选择实现方法时可以有两种方法,一种就是在上面的factory中使用if。。。else 语句,通过传入condition参数选择不同的实现类。

再一种方法就是使用perpority配置文件进行配置,这样在客户端就可以不用传入任何参数就能依据配置文件获得需要的接口。

   注:本笔记来源于《研磨设计模式》一书,如有侵权,请联系本人及时进行删除。

© 著作权归作者所有

共有 人打赏支持
e代宗师
粉丝 1
博文 1
码字总数 517
作品 0
海淀
高级程序员
私信 提问
从 Java 到 Scala (三): object 的应用

本文由 Captain 发表在 ScalaCool 团队博客。 在上篇 Java 到 Scala 系列中,我想你或多或少在语言特性上对有了一定的掌握,在了解完它酷酷的语言特性——让静态回归常态并能简单运用其衍生出...

ScalaCool
09/10
0
0
Java设计模式之工厂方法模式与抽象工厂模式

一、前期回顾 上一篇《Java设计模式之单例模式》详细介绍了单例模式,介绍了单例模式的使用场景,优缺点,同时也写了两种常见的单例模式写法,懒汉式单例模式和饿汉氏单例模式,当然,单例模...

木木匠
11/09
0
0
20个设计模式和软件设计面试问题

不管是参加Java面试还是C#面试,设计模式和软件设计都是任何编程面试中的必问问题。实际上,编程能力和设计技巧是对彼此很好的补充。一个好的程序员通常都是一个好的软件设计人员。他们知道怎...

LCZ777
2014/08/13
0
0
设计模式: Java中的工厂设计模式

原文链接 https://github.com/shellhub/blog/issues/22 前言 工厂设计模式(Factory Design Pattern)属于创建模式之一,工厂设计模式在JDK,Spring,Stuts被广泛使用 当一个类或者接口有多个子类...

shellhub
08/22
0
0
设计模式知识汇总(附github分享)

写在前面 主要内容 为了更系统的学习设计模式,特地开了这样一个基于Java的设计模式【集中营】,都是笔者在实际工作中用到过或者学习过的一些设计模式的一些提炼或者总检。慢慢地初见规模,也...

landy8530
10/10
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Vue + Vue-CLI + Mint-UI 移动端开发新手示例实战 - by dogstar

Vue + Vue-CLI + Mint-UI 移动端开发新手示例实战 - by dogstar 项目源代码,在码云上:https://gitee.com/dogstar/a-vue-mint-demo 快速使用 # 安装依赖npm install# 本地开发调试 lo...

暗夜在火星
39分钟前
1
0
Docker 的 Web 管理工具 DockerFly

Dockerfly是基于 Docker1.12+ (Docker API 1.24+) 开发出Docker 管理工具,提供里最基本的基于 Docker 的管理功能,目的是能够方便广大Docker初学者以及 Docker 管理员能够快速的进行Docker 容...

linuxprobe16
41分钟前
3
0
java.util.concurrent.atomic.AtomicBoolean 源码

类图: 源码: package java.util.concurrent.atomic;import sun.misc.Unsafe;public class AtomicBoolean implements java.io.Serializable { private static final long ser......

狼王黄师傅
44分钟前
2
0
msql创建视图笔录

由于之前写视图都没有记录,这次客户公司要求我写三张视图,却发现自己忘了咋写的!于是有去百度了下,分分钟搞定了。但是,个人还是做个笔录吧!以后不用去看别人的写法咯。 #车辆会员查询...

em_aaron
55分钟前
3
0
年终回顾,为你汇总一份「后端架构技术清单」

2018年马上就要过去了说说我这一年的感想吧 很多人做Java开发3,4年后,都会感觉自己遇到瓶颈。什么都会又什么都不会,如何改变困境,为什么很多人写了7,8年代码还是一个码农,工作中太多被动...

James-
56分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部