对于java的设计模式,我还是第一次认认真真的总结,以前用的时候都不曾留意细节,现在回头再看只知道该怎么设计,却忘记当时为嘛要用它了,

所以这次就做一个demo来再次复习总结一下,希望从中能学到新体悟。先说说设计模式最重要的一个原则吧,就是开闭原则:意思是对扩展开放,对修改关闭

在程序需要进行拓展的时候,不能去修改原有的代码,而是要扩展原有代码,实现一个热插拔的效果。所以一句话概括就是:为了使程序的扩展性好,易于维护和升级。

想要达到这样的效果,我们需要使用接口和抽象类等,后面的具体设计中我们会提到这点。

1、简单的工厂模式

以小明,小雨吃饭睡觉为例:

首先创建一个Human.java接口,该接口的作用相当于女娲造人,它为人类定义了吃饭睡觉的能力

public interface Human {

	public abstract void sleep();

	public abstract void eat();

}

Xiaoming.java,实现了Human接口

public class Xiaoming implements Human {

	public void sleep(){
System.out.println(" ----小明睡觉了---- ");
} public void eat(){
System.out.println(" ----小明吃饭了!---- ");
}
}

Xiaoyu.java同上

public class Xiaoyu implements Human {

	public void sleep() {
System.out.println("小雨睡觉了"); } public void eat() {
System.out.println("小雨吃饭了"); } }

最后我们建个工厂类HumanFactory.java

    public class HumanFactory(){

          public Human getHuman(String name){

              if("Xiaoming".equals(name)){
return new Xiaoming();
}esle if("Xiaoyu".equals(name)){
return new Xiaoyu();
}else{
return null;
}
} }

测试类:

public class HumanTest{

	@Test
public void test1(){
HumanFactory provider = new HumanFactory();
Human xiaoming = provider.getHuman("xiaoming");
xiaoming.sleep();
}
}

输出:----小明睡觉了----

2、多个工厂模式

多个工厂模式是对简单工厂模式的改进,对HumanFactory.java做一下修改就可以了:

public class CarFactory {

	public Car getXiaoming(){
return new Xiaoming();
}
public Car getXiaoyu(){
return new Xiaoyu();
}
}

测试类:

public class HumanTest{

	@Test
public void test1(){
HumanFactory provider = new HumanFactory();
Human xiaoming = provider.getXiaoming();
xiaoming.sleep();
}
}

输出:----小明睡觉了----

3、静态 工厂模式,同样对HumanFactory.java做一下修改就可以了:

public class CarFactory {

	public static Car getXiaoming(){
return new Xiaoming();
}
public static Car getXiaoyu(){
return new Xiaoyu();
}
}

测试类:

public class HumanTest{

	@Test
public void test1(){
Human xiaoming = HumanFactory.getXiaoming();
xiaoming.sleep();
}
}

输出:----小明睡觉了----

总体来说,工厂模式适合:凡是出现了大量的产品需要创建,并且具有共同的接口时,可以通过工厂方法模式进行创建。

在以上的三种模式中,第一种如果传入的字 符串有误,不能正确创建对象,第三种相对于第二种,不需要实例化工厂类,

所以,大多数情况下,我们会选用第三种——静态工厂方法模式。

4、抽象工厂模式

同样的以Human为例:

首先创建同一接口:

public interface Human {

	public abstract void sleep();

	public abstract void wakeup();

}

一下两个类:

public class Xiaoming implements Human {

	public void sleep(){
System.out.println(" ----小明睡觉了---- ");
} public void wakeup(){
System.out.println(" ----小明醒了!---- ");
}
}
public class Xiaoyu implements Human {

	public void sleep() {
System.out.println("小雨睡觉了"); } public void wakeup() {
System.out.println("小雨睡醒了"); } }

提供两个工厂类

public class XiaomingFactory implements FactoryProvider{

	public Human produce() {
return new Xiaoming();
} }
public class XiaoyuFactory implements FactoryProvider{

	public Human produce() {
return new Xiaoyu();
}
}

实现同一个接口:

public interface FactoryProvider {

	public Human produce();
}

测试类:

public class HumanTest{

	@Test
public void test1(){
FactoryProvider provider = new XiaomingFactory();
Human xiaoming = provider.produce();
xiaoming.sleep();
}
}

输出:小明睡觉了。

其实这个模式的好处就是,如果你现在想增加一个功能:发及时信息,则只需做一个实现类,实现Sender接口,同时做一个工厂类,实现Provider接口,就OK了,无需去改动现成的代码。

这样做,拓展性较好!

java设计模式之——工厂模式的更多相关文章

  1. 浅析JAVA设计模式之工厂模式(一)

    1 工厂模式简单介绍 工厂模式的定义:简单地说,用来实例化对象,取代new操作. 工厂模式专门负责将大量有共同接口的类实例化.工作模式能够动态决定将哪一个类实例化.不用先知道每次要实例化哪一个类. 工 ...

  2. Java设计模式之工厂模式(Factory模式)介绍(转载)

    原文见:http://www.jb51.net/article/62068.htm 这篇文章主要介绍了Java设计模式之工厂模式(Factory模式)介绍,本文讲解了为何使用工厂模式.工厂方法.抽象工 ...

  3. Java 设计模式之工厂模式(二)

    原文地址:Java 设计模式之工厂模式(二) 博客地址:http://www.extlight.com 一.背景 本篇内容是 Java 设计模式创建型模式的第二篇.上一篇主题为 <Java 设计 ...

  4. 浅析JAVA设计模式之工厂模式(二)

    1 工厂方法模式简单介绍 工厂方法 (Factroy Method)模式:又称多态性工厂模式(Polymorphic Factory),在这样的模式中,核心工厂不再是一个详细的类.而是一个抽象工厂,提 ...

  5. java设计模式2————工厂模式

    1.工厂模式介绍: 1.1.实现了创建者与调用者的分离 1.2.详细分类: 简单工厂模式 工厂方法模式 抽象工厂模式 1.3.所遵循的OOP原则: 开闭原则:对扩展开放,对修改关闭 依赖倒转原则:面向 ...

  6. java 设计模式之工厂模式与反射的结合

    工厂模式: /**  * @author Rollen-Holt 设计模式之 工厂模式  */   interface fruit{     public abstract void eat(); } ...

  7. JAVA设计模式--抽象工厂模式

    抽象工厂设计模式 1.系统中有多个产品族,而系统一次只可能消费其中一族产品2.同属于同一个产品族的产品以其使用.来看看抽象工厂模式的各个角色(和工厂方法的如出一辙):抽象工厂角色: 这是工厂方法模式的 ...

  8. Java设计模式之-----工厂模式(简单工厂,抽象工厂)

    一.工厂模式主要是为创建对象提供过渡接口,以便将创建对象的具体过程屏蔽隔离起来,达到提高灵活性的目的. 工厂模式在<Java与模式>中分为三类:1)简单工厂模式(Simple Factor ...

  9. Java设计模式之工厂模式(简单工厂模式+工厂方法模式)

    摘自http://blog.csdn.net/jason0539/article/details/23020989 在面向对象编程中, 最通常的方法是一个new操作符产生一个对象实例,new操作符就是 ...

  10. java设计模式之一工厂模式

    简单工厂模式是java设计模式中最简单的设计模式之一: 工厂模式是最常用的设计模式之一. 工厂模式就相当于创建实例对象的new,我们经常要根据类Class生成实例对象,如A a=new A() 工厂模 ...

随机推荐

  1. Web3D

    https://baike.baidu.com/item/WEB%203D/11066359?fr=aladdin https://zhidao.baidu.com/question/17325151 ...

  2. HCNA之网络通信基础

    一.通信与网络 通信的概念我们并不陌生,在人类社会的起源和发展过程中,通信就直伴随着我们.般认为, 20世纪七.八十年代,人类社会已进入到信息时代,对于生活在信息时代的我们,通信的必要性和重要性更是不 ...

  3. 2T以上磁盘格式化

    1.安装软件 对于 Debian/Ubuntu 用户, 使用 APT-GET 命令或者 APT 命令来安装 parted #apt-get install -y parted 对于 RHEL/Cent ...

  4. web端代码提示

    web端代码提示 这个功能是基本完成了,但是与需求不一致.但是废弃挺可惜的,所以就单独拿出来作为一个例子记录一下. 其中还包括了,java代码的自动编译和执行,在web端显示执行结果. 下载链接: h ...

  5. Windows 注册表 16进制时间转换( Convert Reg_binary Time to a Datetime )

    背景: Windows注册表中,存在大量16进制的时间,以 reg_binary存储在注册表中. 例如: 0D 6C A4 4B 37 C5 CE 01 这种值日常报表中需要转换为适合人阅读的格式,实 ...

  6. 换PHP7后访问Apache虚拟站点Forbidden的问题解决

    Httpd.conf中,注释掉前2行,补上后2行 <Directory /> #AllowOverride none #Require all denied Order deny,allo ...

  7. NUC970开发板烧录

    本次烧录的采用新塘公司官方的NuWriter软件进行烧录,现在我们首先来讲解如何将uboot,Linux内核,根文件系统烧录到开发板上. 过程中所需文件链接: 链接:https://pan.baidu ...

  8. 清除Linux日志文件命令

    find /opt/tomcat/logs/catalina_* -mtime +9 -exec rm -rf {} \;

  9. 《HTTP权威指南》6-代理

    Web的中间实体 HTTP的代理服务器既是Web服务器又是Web客户端,它既需要正确地处理从客户端发来的请求和连接,返回响应,有需要向服务器发送请求,并接受响应. 私有和共享代理 代理服务器可以是某个 ...

  10. Android-Nexus5-命令刷机

    第一步)需要有有一部Nexus5手机: 第二步)寻找 .tgz 刷机包: 1: 2: 3.进行hammerhead-lmy47d-factory-6c1ad81e.tgz的下载: 4 进行解压: 5. ...