`

设计模式(二)——工厂方法模式(Factory Method)

 
阅读更多

1. 普通工厂模式

就是建立一个工厂类,对实现了同一接口的一些类进行实例的创建。

首先,创建二者的共同接口: 

public interface Sender {
	public void Send();
}

 其次,创建该接口的实现类: 

public class MailSender implements Sender {
	@Override
	public void Send() {
		System.out.println("this is mailsender!");
	}
}

 

public class SmsSender implements Sender {

	@Override
	public void Send() {
		System.out.println("this is sms sender!");
	}
}

 最后,建工厂类: 

public class SendFactory {

	public Sender produce(String type) {
		if ("mail".equals(type)) {
			return new MailSender();
		} else if ("sms".equals(type)) {
			return new SmsSender();
		} else {
			System.out.println("请输入正确的类型!");
			return null;
		}
	}
}

 我们来测试下: 

public class FactoryTest {

	public static void main(String[] args) {
		SendFactory factory = new SendFactory();
		Sender sender = factory.produce("sms");
		sender.Send();
	}
}

 输出:this is sms sender! 

 

 

2. 多个工厂方法模式

是对普通工厂方法模式的改进,在普通工厂方法模式中,如果传递的字符串出错,则不能正确创建对象,而多个工厂方法模式是提供多个工厂方法,分别创建对象。

将上面的代码做下修改,改动下SendFactory类就行。 

public class SendFactory {
	
	public Sender produceMail(){
		return new MailSender();
	}
	
	public Sender produceSms(){
		return new SmsSender();
	}
}

 测试类如下:

public class FactoryTest {

	public static void main(String[] args) {
		SendFactory factory = new SendFactory();
		Sender sender = factory.produceMail();
		sender.Send();
	}
}

 输出:this is mailsender! 

 

 

3. 静态工厂方法模式

将上面的多个工厂方法模式里的方法置为静态的,不需要创建实例,直接调用即可。

public class SendFactory {
	
	public static Sender produceMail(){
		return new MailSender();
	}
	
	public static Sender produceSms(){
		return new SmsSender();
	}
}

 测试类:

public class FactoryTest {

	public static void main(String[] args) {	
		Sender sender = SendFactory.produceMail();
		sender.Send();
	}
}

 输出:this is mailsender!

 

 

总结:

       总体来说,工厂模式适合:凡是出现了大量的产品需要创建,并且具有共同的接口时,可以通过工厂方法模式进行创建。在以上的三种模式中,第一种如果传入的字符串有误,不能正确创建对象,第三种相对于第二种,不需要实例化工厂类,所以,大多数情况下,我们会选用第三种——静态工厂方法模式。

 

分享到:
评论

相关推荐

    设计模式——工厂方法模式

    在这个压缩包中,`FactoryMethod`可能包含了Java实现工厂方法模式的源代码示例。 设计模式是一种在特定场景下解决软件设计问题的通用、可重用的解决方案,它代表了最佳实践,被广泛应用于各种编程语言中。工厂方法...

    设计模式之“工厂方法模式[Factory Method Pattern]”

    今天我们要探讨的是设计模式中的一个经典成员——工厂方法模式(Factory Method Pattern)。工厂方法模式是创建型设计模式的一种,它提供了一种创建对象的最佳方式。 ### 一、什么是工厂方法模式? 工厂方法模式...

    工厂方法和抽象工厂——Factory Method & Abstract Factory

    在软件设计模式中,工厂方法(Factory Method)和抽象工厂(Abstract Factory)是两种非常重要的创建型模式。它们主要用于解决对象实例化的问题,提供了一种封装对象创建过程的方法,使得代码更加灵活,易于扩展和...

    设计模式之-工厂方法-FactoryMethod

    《设计模式之——工厂方法(Factory Method)》 在软件工程中,设计模式是一种解决常见问题的可重用解决方案,它被广泛应用于构建高质量、可维护的代码。工厂方法是面向对象设计模式的一种,属于创建型模式。这个...

    python设计模式——factorymethod模式(最新可编辑文档).doc

    python设计模式——factorymethod模式(最新可编辑文档)

    设计模式代码——c#

    4. 工厂方法模式(Factory Method) 5. 原型模式(Prototype) 结构型: 6. 适配器模式(Adapter Pattern) 7. 桥接模式(Bridge Pattern) 8. 装饰模式(Decorator Pattern) 9. 组合模式(Composite Pattern...

    设计模式(简单工厂和工厂方法C++版)Demo程序

    本Demo程序主要涵盖了两种常用的创建型设计模式——简单工厂模式(Simple Factory)和工厂方法模式(Factory Method)。这两种模式都是用来创建对象,但它们在灵活性和抽象程度上有所不同。 简单工厂模式是一种静态...

    Java设计模式——工厂设计模式详解

    2. 工厂方法(Factory Method):工厂方法为工厂类定义了接口,用多态来削弱了工厂类的职能。工厂方法可以降低风险和为日后的维护、扩展做准备。 3. 抽象工厂(Abstract Factory):抽象工厂是工厂模式三种形态中...

    设计模式精解——GoF23中设计模式解析

    ### 设计模式精解——GoF23中设计模式解析 #### 重要性与起源 设计模式是软件工程领域的一项重要研究,它提供了一系列解决常见软件设计问题的模板。GoF23指的是由Erich Gamma、Richard Helm、Ralph Johnson和John ...

    《java设计模式》课后习题模拟试题解答——刘伟.zip

    1. **创建型模式**:包括单例(Singleton)、工厂方法(Factory Method)、抽象工厂(Abstract Factory)、建造者(Builder)和原型(Prototype)。这些模式关注对象的创建过程,使得代码更加灵活,易于管理和扩展。...

    设计模式-Java语言中的应用(pdf)

    工厂方法模式用于创建对象,允许推迟实例化到子类,增强了代码的灵活性。装饰器模式可以在不改变对象接口的情况下,动态地给对象添加新的行为或职责。而代理模式可以用来控制对原对象的访问,比如在访问前进行权限...

    设计模式与泡MM——设计模式入门教程

    ##### 3、FACTORY METHOD(工厂方法模式) 工厂方法模式进一步抽象了工厂的概念,定义了一个创建产品对象的工厂接口,但让具体的子类决定实例化哪一个类。 **例子**:带MM去快餐店吃汉堡,你可以说“来一个汉堡”...

    Python设计模式之工厂方法模式实例详解

    本文实例讲述了Python设计...设计模式——工厂方法模式 工厂方法模式(Factory Method Pattern):定义一个用于创建对象的接口,让子类决定实例化哪一个类,工厂方法使一个类的实例化延时到其子类. 工厂方法模式克服了简单工

    java23种设计模式——图解——附带源码

    [工厂方法模式](https://example.com/factory_method_pattern) **例子**: ```java // Product Interface public interface Work { void doWork(); } // Concrete Products public class StudentWork implements...

    设计模式——可复用面向对象软件的基础(3)

    《设计模式——可复用面向对象软件的基础》是IT领域中的经典著作,由Erich Gamma、Richard Helm、Ralph Johnson和John Vlissides四位大师合著,他们因此被誉为GoF(Gang of Four)。这本书提出了面向对象设计的23种...

    设计模式——可复用面向对象软件的基础(1)

    创建型模式如单例模式(Singleton)、工厂方法模式(Factory Method)和建造者模式(Builder)关注于对象的创建过程,使得对象的实例化更为灵活,同时也控制了对象的生命周期。 结构型模式如适配器模式(Adapter)...

    C#中的简单工厂模式与工厂方法模式

    工厂方法模式(Factory Method Pattern)也是一种常用的创建型模式。它的核心思想是在基类中定义一个创建对象的接口,让子类决定实例化哪一个类。这种模式将实例化的工作推迟到子类去完成。 ##### 3.2 实现原理 ...

    设计模式可复用面向对象软件的基础.zip

    3.3 Factory Method(工厂方法)— 对象创建型模式 70 3.4 Prototype(原型)—对象创建型 模式 87 3.5 Singleton(单件)—对象创建型 模式 84 3.6 创建型模式的讨论 89 第4章 结构型模式 91 4.1 Adapter(适配器)...

    工厂方法设计模式

    在众多的设计模式中,“工厂方法”(Factory Method)是一种常用的创建型设计模式,它提供了一种创建对象的最佳方式,即定义一个创建对象的接口,但让实现这个接口的类决定实例化哪一个类。工厂方法使得一个类的实例...

Global site tag (gtag.js) - Google Analytics