`
king_tt
  • 浏览: 2234493 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

【设计模式】学习笔记4:简单工厂模式(Simple Factory)

阅读更多

 

 

 

本文出自 http://blog.csdn.net/shuangde800

 

 

之前已经学过“针对接口编程,而不是针对实现编程”,但是,当使用“new”时,却的确是在实例化一个具体类,所以用的是具体实现,而不是接口。

 

Duck duck = new MallardDuck( );

 

上面就是常用的实例化的new 方法。

 

 

用"new"有什么不好呢?

在技术上,new 没错,都是“改变”的错。

针对接口编程,可以隔离掉以后系统可能发生的一大堆改变。因为如果是针对接口而写,那么通过多态,它可以与任何新类实现该接口。

但是,使用大量的具体类时,也是自找麻烦,因为一旦加入新的具体类,就必须改变代码。也就是说,你的代码并非“对修改关闭”。相用新的类必须重新打开它。

 

 

认识简单工厂模式

假设要开一个比萨店,要获取很多不同类型的比萨,那么我们可以写这样一个方法来获取比萨对象:

 

Pizza orderPizza(String type){
    Pizza pizza;

    if(type.equals("chees")){
        pizza = new CheesePizza();
    }else if(type.equals("greek")){
        pizza = new GreekPizza(); 
    }else if(type.equals("pepperoni")){
        pizza = new PepperoniPizza();
    }

    pizza.prepare();
    pizza.bake();
    pizza.cut();
    pizza.box();

    return pizza;
}



 

 

当比萨类型改变,或删除时,上面的代码就要改变,不符合设计原则。

 

 

所以我们把创建对象移到orderPizza()之外,由这个对象专职创建比萨。

 


SimplePizzaFactory只做一件事情:帮它的客户创建比萨。

 

public class SimplePizzaFactory {

	public Pizza createPizza(String type) {
		Pizza pizza = null;

		if (type.equals("cheese")) {
			pizza = new CheesePizza();
		} else if (type.equals("pepperoni")) {
			pizza = new PepperoniPizza();
		} else if (type.equals("clam")) {
			pizza = new ClamPizza();
		} else if (type.equals("veggie")) {
			pizza = new VeggiePizza();
		}
		return pizza;
	}
}



 

上面对象就是工厂(factory),工厂处理创建对象的细节。

 

 

 

下面重做比萨店:

 


PizzaStore类,使用SimplePizzaFactory对象来创建比萨

 

public class PizzaStore {
	SimplePizzaFactory factory;
 
	public PizzaStore(SimplePizzaFactory factory) { 
		this.factory = factory;
	}
 
	public Pizza orderPizza(String type) {
		Pizza pizza;
 
		pizza = factory.createPizza(type);  //注意,把new变成了工厂的创建方法!不再使用具体实例化!
 
		pizza.prepare();
		pizza.bake();
		pizza.cut();
		pizza.box();

		return pizza;
	}

}



 

 

 

 

 

定义简单工厂模式

简单工厂其实不是一个设计模式,反而是一种编程习惯,但是却经常使用。

简单工厂模式(Simple Factory Pattern)属于类的创新型模式,又叫静态工厂方法模式(Static FactoryMethod Pattern),是通过专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。

 

 

 

 

 

 

 

分享到:
评论

相关推荐

    23种设计模式学习笔记及源码

    这个压缩包文件包含了23种设计模式的学习笔记和源码,旨在帮助开发者深入理解并熟练运用这些模式。以下是对每种设计模式的详细解释,以及它们在Java编程中的应用。 1. **单例模式**:确保一个类只有一个实例,并...

    设计模式学习笔记

    ### 设计模式学习笔记 #### 一、简单工厂模式 (Simple Factory) **类图与描述:** 简单工厂模式的核心在于存在一个工厂类,这个工厂类能够根据不同的输入参数返回不同的对象实例。简单工厂模式并不涉及继承关系,...

    Java中的design-patterns::open_book:使用通俗易懂的案例,类图,以及配套学习笔记来详解Java的二十种设计模式!

    :check_mark:简单工厂模式( Simple Factor Pattern ) :memo: , :check_mark:工厂方法模式( Factory Method Pattern ) :memo: , :check_mark:抽象工厂模式( Abstract Factroy Pattern ) :memo: , :check_...

    23种设计模式分析学习笔记(Java版)

    创建型设计模式主要用于对象的创建,包括简单工厂模式、抽象工厂模式和工厂方法模式。简单工厂模式通过一个静态方法创建对象,使得客户端代码与具体类的创建分离,增强了系统的可扩展性。例如,我们可以通过传入参数...

    java设计模式(收集整理,学习笔记)

    简单工厂模式是最简单的工厂模式,它包含一个工厂类,根据传入的参数决定返回哪种类型的实例。 ```java // 抽象产品角色 public interface Car { public void drive(); } // 具体产品角色 public class BwmCar ...

    设计模式笔记

    - **Simple Factory(简单工厂模式)**:通过提供一个创建产品实例的方法,使得客户无需指定产品的具体类,从而降低了客户端与产品类间的耦合。 - **Abstract Factory(抽象工厂模式)**:为创建一系列相关或相互...

    设计模式笔记总结 含C#示例代码 复习好帮手

    简单工厂模式 (Simple Factory Pattern) 简单工厂模式是工厂模式的一种变体,尽管它并未被归类于GoF所提出的23种设计模式之中,但它依然是一种非常实用的设计模式。简单工厂模式的主要作用在于封装实例化的细节,...

    java版中国象棋源码-hello-design-pattern:设计模式学习笔记

    设计模式学习笔记,此项目参考《大话设计模式》,只能作为入门级设计模式学习 设计原则 职责单一原则 开放-封闭原则 依赖倒转原则 高层模块不依赖底层模块,两个模块都应该依赖抽象。抽象不依赖细节,细节依赖抽象。...

    良葛格DesignPattern学习笔记

    ### 设计模式学习笔记知识点概览 #### 一、引言 设计模式是软件工程领域中一种非常重要的概念,它代表了一种最佳实践的方式,帮助开发者解决特定问题时能够更加高效、灵活。良葛格的《Design Pattern学习笔记》不仅...

    spring学习笔记1

    ### Spring学习笔记1 #### 一、Spring框架简介与IOC概念 **Spring**是一个开源的Java平台框架,它提供了一种全面的编程模型,并通过一系列的功能模块支持企业级应用程序开发。Spring的核心特性包括依赖注入...

    MLDN_J2EE框架_笔记(已解密)

    10. **设计模式**:在J2EE开发中常见的设计模式,如MVC(Model-View-Controller)、Singleton、Factory等。 11. **性能优化和测试**:涉及J2EE应用的性能监控、调优策略,以及单元测试和集成测试的工具和方法。 12...

    RabbitMQ自学笔记

    综上所述,通过本篇笔记的学习,读者可以全面掌握RabbitMQ的基本使用方法以及一些高级特性,这对于实际项目中的消息处理需求提供了强有力的支持。无论是简单的消息传输还是复杂的分布式系统架构设计,RabbitMQ都能...

Global site tag (gtag.js) - Google Analytics