工厂方法模式是设计模式中应用最广泛的模式。在面向对象的编程中,对象的创建工作非常简单,对象的创建时机却很重要。工厂方法模式就是解决这个问题,它通过面向对象的手法,将所要创建的具体对象创建工作延迟到了子类,从而提供了一种扩展的策略,较好的解决了这种紧耦合的关系。

Bmw.java

package fac;

public interface Bmw {
//产品的信息介绍
void showInfo();
}
class Bmw3 implements Bmw{ @Override
public void showInfo() {
// TODO Auto-generated method stub
System.out.println("宝马3系");
} }
class Bmw5 implements Bmw{ @Override
public void showInfo() {
// TODO Auto-generated method stub
System.out.println("宝马5系");
} }
class Bmw7 implements Bmw{ @Override
public void showInfo() {
// TODO Auto-generated method stub
System.out.println("宝马7系");
} }

BmwFactory.java

package fac;

//汽车生产工厂接口
public interface BmwFactory {
Bmw productBmw(); }
class Bmw3Factory implements BmwFactory{ @Override
public Bmw productBmw() {
// TODO Auto-generated method stub
System.out.println("生产宝马3系");
return new Bmw3();
} }
class Bmw5Factory implements BmwFactory{ @Override
public Bmw productBmw() {
// TODO Auto-generated method stub
System.out.println("生产宝马5系");
return new Bmw5();
} }
class Bmw7Factory implements BmwFactory{ @Override
public Bmw productBmw() {
// TODO Auto-generated method stub
System.out.println("生产宝马7系");
return new Bmw7();
} }

Main.jav

package fac;

public class Main {
public static void main(String[] args) {
Bmw b3 = new Bmw3Factory().productBmw();
b3.showInfo();
Bmw b5 = new Bmw5Factory().productBmw();
b5.showInfo();
Bmw b7 = new Bmw7Factory().productBmw();
b7.showInfo();
}
}

输出:

生产宝马3系
宝马3系
生产宝马5系
宝马5系
生产宝马7系
宝马7系

说明:通过工厂把new对象给隔离,通过产品的接口可以接受不同实际产品的实现类,实例的类名的改变不影响其它合作开发人员的编程。

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

  1. PHP设计模式一:工厂方法设计模式

    一.什么是工厂方法模式 作为一种创建型设计模式,工厂方法模式就是要创建“某种东西”.对于工厂方法,要创建的“东西”是一个产品,这个产品与创建它的类之间不存在绑定. 实际上,为了保持这种松耦合,客户会通 ...

  2. 比较 Java 静态工厂方法与构造函数

    1 什么是静态工厂方法 Java 静态工厂方法是在方法前加上 public static,让这个方法变为公开.静态的方法.该方法返回该类的一个实例,就好像一个工厂生产出一个产品.所以称之为静态工厂方法 ...

  3. Java之工厂方法

    普通工厂模式: 第一步:定义接口,坚持面向接口编程, package dp; public interface Sender {    public void send();} 第二步:实现接口: p ...

  4. (Factory method)工厂方法设计模式

    定义: 1.) 工厂方法模式是用来封装对象的创建,通过让子类来决定创建的对象是什么,来达到将对象创建的过程封装的目的: 2.) 定义了一个创建对象的接口,但由子类决定要实例的泪是哪一个.工厂方法让类把 ...

  5. 使用C# (.NET Core) 实现简单工厂(Simple Factory) 和工厂方法设计模式 (Factory Method Pattern)

    本文源自深入浅出设计模式. 只不过我是使用C#/.NET Core实现的例子. 前言 当你看见new这个关键字的时候, 就应该想到它是具体的实现. 这就是一个具体的类, 为了更灵活, 我们应该使用的是 ...

  6. java 内部类 工厂方法

    用内部类实现工厂模式 :优先使用类而不是接口,如果你的设计中需要某个接口,你必须了解它,否则不到迫不得已,不要将其放到你的类中 //: innerclasses/Factories.java impo ...

  7. JAVA设计模式--工厂方法模式

    工厂方法设计模式 抽象工厂角色: 这是工厂方法模式的核心,它与应用程序无关.是具体工厂角色必须实现的接口或者必须继承的父类.在java中它由抽象类或者接口来实现.具体工厂角色:它含有和具体业务逻辑有关 ...

  8. Java设计模式---工厂模式(简单工厂、工厂方法、抽象工厂)

    工厂模式:主要用来实例化有共同接口的类,工厂模式可以动态决定应该实例化那一个类.工厂模式的形态工厂模式主要用一下几种形态:1:简单工厂(Simple Factory).2:工厂方法(Factory M ...

  9. 设计模式3---工厂模式(Factory Pattern简单工厂、工厂方法、抽象工厂)

    工厂模式:主要用来实例化有共同接口的类,工厂模式可以动态决定应该实例化那一个类.工厂模式的形态工厂模式主要用一下几种形态:1:简单工厂(Simple Factory).2:工厂方法(Factory M ...

随机推荐

  1. 虚拟链路(virtual-link)

    第四部分,虚拟链路配置.我们都知道,在ospf多区域中,所有与主干区域(ospf0)相连接的其他区域可以相互学系路由信息,但是,如果是非主干区域和非主干区域相连,就不能相互学习路由信息,这时候,我们可 ...

  2. React: 研究Redux的使用

    一.简介 在上一篇文章中,大概讲了下Flux设计模式的使用,在末尾顺便提了一些基于Flux的脚本库,其中Redux已经毋庸置疑地成为了众多脚本库的翘楚之一.是的,Redux是基于Flux开发的,Red ...

  3. Tomcat系列(一)- 整体架构

    整体架构 我们想要了解一个框架,首先要了解它是干什么的,Tomcat我们都知道,是用于处理连接过来的Socket请求的.那么Tomcat就会有两个功能: 对外处理连接,将收到的字节流转化为自己想要的R ...

  4. Python面向对象-定制方法

    Python中的class可以定义许多定制方法,可以让我们方便的生成特定的类. 我们之前介绍了__slots__.__len__(),python中还有许多这样的特殊函数: __str__ >& ...

  5. JS---案例:点击按钮摇起来 & 星星闪动 (挺难看的)

    案例1:点击按钮摇起来 思路: 1. 2张图片,放进div里面,摇起来的本质是,此div按上下左右的位置和在一定的时间内发生移动 2. 所以用随机数的概念来实现位置的移动,用setInterval来实 ...

  6. DataGridView重新加载数据后,选中上次选中的行。

    public int SelecedRow;//记录当前鼠标点中的行索引(用于解决用户获取看板数据,刷新数据后,当前选中行回到默认行) private void dataGridView1_CellC ...

  7. <科普>CPU进行四则运算(加减乘除)的主流方法

    以下除特殊说明外均为32位数的运算 1.加法运算 A   +   B    =   C 无符号整数加法和有符号整数加法均采用以下方案进行操作 用到的寄存器与初始化内容: 32位加数寄存器------- ...

  8. (2018版)webstorm的安装和破解

    前言 相信使用HBuildX的各位都用过,所以这个webstorm就是用来代替的. 因为使用方式跟idea等软件差不多,如果习惯了idea的操作方式的可以试一试 安装webstorm 这是2018版的 ...

  9. SpringBoot"热"部署解决方案

    作者:故事我忘了¢个人微信公众号:程序猿的月光宝盒 SpringBoot热部署两种方式 1.SpringLoader 插件 ​ 缺点: Java 代码做部署处理.但是对页面无能为力. 2.DevToo ...

  10. 好的js书写习惯

    1:单一判断 bad if (result) { console.log("秋叶"); } if (!result) { console.log("秋叶"); ...