Java设计模式(创建型:工厂方法模式)

(该文内容为原创,有不足之处望多多指教!)

设计模式根据目的准则可以分为三类:

  1. 创建型:creational 创建型的设计模式与对象的创建有关。
  2. 结构型:Structural 处理类和对象之间的组合。
  3. 行为型:behavioral 描述类和对象如何交互及如何分配职责。
  1. 工厂方法模式是什么?

站在使用者的角度,工厂方法模式是指使用者提出想要实现的具体功能或者说是想要生产的具体的东西的要求,在通过工厂制造之后就将该东西或功能交付给使用者。使用者并不知道实现的具体过程,只是做了要求提出以及实现的结果的使用。

严谨来说工厂方法模式(Factory Method)也叫工厂模式,属于类创建型模式,工厂父类(接口)负责定义产品对象的公共接口,而子类工厂则负责创建具体的产品对象。

目的:是为了把产品的实例化操作延迟到子类工厂中完成,通过工厂子类来决定究竟应该实例化哪一个产品具体对象

有四部分组成:

1. 抽象工厂角色:具体工厂必须实现的接口或必须继承的父类。一般由抽象类或接口实现。

2. 具体工厂角色:是具体应用程序调用以创建对应的具体产品的对象。一般它由具体的类来实现。

3. 抽象产品角色:具体产品继承的父类或实现的接口。一般由抽象类或接口实现。

4. 具体产品角色:具体工厂角色所创建的对象就是它的实例。一般由具体类实现。

  1. 通过实例来区分工厂方法模式的四部分及运用。

实例:boss提出发送消息给员工

public class FactoryMethod{

/**

* 定义公共的接口send

*/

interface Send {

void send();

}

/**

* 定义具体工厂角色,继承公共接口

*/

class SmsFactory implements Send{

@Override

public void send() {

// TODO 自动生成的方法存根

System.out.println("通过短信发送消息");

}

}

class MailFactory implements Send{

@Override

public void send() {

// TODO 自动生成的方法存根

System.out.println("通过E—mail发送消息");

}

}

/**

* 将使用者所指定的方式与子工厂匹配,利用工厂实现

*

*/

class Factory{

public void method(String a){

if ("sms".equals(a)){new SmsFactory().send();}

else if("email".equals(a)){new MailFactory().send();}

else

System.out.print("输入错误");

}

}

/**

* 定义使用者

*/

public static void main(String args[]){

FactoryMethod temp=new FactoryMethod();

Factory temp1=temp.new Factory();

temp1.method("sms");

temp1.method("email");

}

}

输出为:通过短信发送消息

通过E—mail发送消息

时间: 2024-11-05 20:32:19

Java设计模式(创建型:工厂方法模式)的相关文章

创建型-工厂方法模式

1.工厂方法模式意图: 定义一个用于创建对象的接口,让子类决定实例化哪一个类.Factory Method使一个类的实例化延迟到其子类. 2.应用场景: 考虑一个榨汁机的应用场景.榨汁机可以用来制作苹果汁.西瓜汁.橘汁等,即榨汁机可以用来制作水果汁.但是,夏天的冷饮店中,为了提高制作水果汁的效率和防止味道互串等情况,可能需要分别准备三个水果榨汁机,分别用来生产苹果汁.西瓜汁.橘汁等. 3.工厂方法模式类图: 角色: Product:定义工厂方法所创建对象.如场景描述中的果汁. ConcreteP

Java设计模式3:工厂方法模式

工厂方法模式 工厂方法模式是类的创建模式.工厂方法模式的用意是定义一个创建产品对象的工厂接口,将实际创建工厂推迟到子类中. 工厂方法模式 工厂方法模式是对简单工厂模式进一步抽象的结果. 假如是不使用反射的工厂方法模式,那么所有的if... else if...else都放在工厂类中,势必造成工厂类的无限臃肿 这时候就需要工厂方法模式来处理这个问题了.工厂方法模式中,核心的工厂类不再负责所有对象的创建,而是将具体的创建工作交给子类去做.这个类则摇身一变变成了一个抽象工厂角色,仅仅负责给出具体工厂子

创建型 — 工厂方法模式(Factory Method)

引言:自己在项目中有这样一个代码逻辑,有一个接口,原来只有一个实现类,在创建它时就直接创建了.后来新增了需求,这个接口多了一个实现类.再对定义接口的实际对象时,需要根据传入的参数,判断到底利用哪一个实现类来创建.于是自己就在原来的代码处加了if-else,将对象的创建逻辑完全混杂在了原来代码处.当时自己觉得已经完美的解决了这个问题. 后来,请

java设计模式--创建型模式

2016-04-24 10:10:34 创建型模式:工厂方法模式.抽象工厂模式.单例模式.建造者模式.原型模式 注意:工厂模式可以分为三类: 1)简单工厂模式(Simple Factory) 2)工厂方法模式(Factory Method) 3)抽象工厂模式(Abstract Factory)  这三种模式从上到下逐步抽象,并且更具一般性.GOF在<设计模式>一书中将工厂模式分为两类:工厂方法模式(Factory Method)与抽象工厂模式(Abstract Factory).将简单工厂模式

设计模式-创建型-工厂模式

工厂设计模式: 顾名思义,该模式是用来生产对象的.在面向对象的设计模式中,万物皆对象,若使用new来创建对象,就会对该对象产生强耦合,加入我们需要更换该对象,那么使用该对象的对象都需要进行修改,这显然违背了开闭原则(OCP).如果我们使用工厂来产生对象,我们只需要与这个工厂打交道就可以了,无需关心具体的对象,达到解耦的目的. 接下来我们从实际的案例出发,从无工厂到有工厂的区别. 去披萨店订购披萨,首先披萨的种类很多(CheesePizza.GreekPizza.DurianPizza{等),披萨

设计模式(创建型)之原型模式(Prototype Pattern)

PS一句:最终还是选择CSDN来整理发表这几年的知识点,该文章平行迁移到CSDN.因为CSDN也支持MarkDown语法了,牛逼啊! 概述 原型模式是一种创建型设计模式,它通过复制一个已经存在的实例来返回新的实例,而不是新建实例.被复制的实例就是我们所称的原型,这个原型是可定制的.原型模式多用于创建复杂的或者耗时的实例, 因为这种情况下,复制一个已经存在的实例可以使程序运行更高效,或者创建值相等,只是命名不一样的同类数据. 原型模式要求对象实现一个可以"克隆"自身的接口,这样就可以通过

设计模式之:工厂方法模式

模式的定义与特点 工厂方法(FactoryMethod)模式的定义:定义一个创建产品对象的工厂接口,将产品对象的实际创建工作推迟到具体子工厂类当中.这满足创建型模式中所要求的“创建与使用相分离”的特点. 我们把被创建的对象称为“产品”,把创建产品的对象称为“工厂”.如果要创建的产品不多,只要一个工厂类就可以完成,这种模式叫“简单工厂模式”,它不属于 GoF 的 23 种经典设计模式,它的缺点是增加新产品时会违背“开闭原则”. 本节介绍的“工厂方法模式”是对简单工厂模式的进一步抽象化,其好处是可以

设计模式2:工厂方法模式

定义:定义一个用于创建对象的接口,让子类决定实例化哪一个类,工厂方法使一个类的实例化延迟到其子类. 类型:创建类模式 类图: 工厂方法模式代码 [java] view plaincopy interface IProduct { public void productMethod(); } class Product implements IProduct { public void productMethod() { System.out.println("产品"); } } int

设计模式学习笔记--工厂方法模式

学习过简单工厂模式,感觉很好用.在创建对象时,可以将复杂的初始化操作从客户端分离出来,简化客户端代码.大大的减少了代码修改的难度.而且可以通过参数不同,创建不同的对象. 但是简单工厂模式也有一些弊端,违背了开放--封闭原则.即如果我们增加了一个产品,对应的工厂也要进行修改,即switch---case中要新增加一些分支条件,不利于扩展.所以就有了下面的工厂方法模式: 工厂方法模式:定义了一个用于创建对象的接口,子类决定实例化哪一个类,工厂方法模式使一个类的实例化延迟到子类. // 设计模式Dem

设计模式C++实现——工厂方法模式

模式定义: 工厂方法模式定义了一个创建对象的接口,但由子类决定要实例化的类是哪一个. 工厂方法让类把实例化推迟到子类. 模式结构: Creator是一个类,它实现了全部操纵产品的方法,但不实现工厂方法. Creator的全部子类都必须实现工厂方法(factoryMethod()),以实际制造出产品. 全部的产品必须实现Product基类.这样一来使用这些产品的类就能够引用这个基类,而不是派生类. 举例: 披萨店希望可以开一些加盟店. 经营者希望确保加盟店运营的质量,所以希望这些店都使用能经过实践