本文出自 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种设计模式的学习笔记和源码,旨在帮助开发者深入理解并熟练运用这些模式。以下是对每种设计模式的详细解释,以及它们在Java编程中的应用。 1. **单例模式**:确保一个类只有一个实例,并...
### 设计模式学习笔记 #### 一、简单工厂模式 (Simple Factory) **类图与描述:** 简单工厂模式的核心在于存在一个工厂类,这个工厂类能够根据不同的输入参数返回不同的对象实例。简单工厂模式并不涉及继承关系,...
:check_mark:简单工厂模式( Simple Factor Pattern ) :memo: , :check_mark:工厂方法模式( Factory Method Pattern ) :memo: , :check_mark:抽象工厂模式( Abstract Factroy Pattern ) :memo: , :check_...
创建型设计模式主要用于对象的创建,包括简单工厂模式、抽象工厂模式和工厂方法模式。简单工厂模式通过一个静态方法创建对象,使得客户端代码与具体类的创建分离,增强了系统的可扩展性。例如,我们可以通过传入参数...
简单工厂模式是最简单的工厂模式,它包含一个工厂类,根据传入的参数决定返回哪种类型的实例。 ```java // 抽象产品角色 public interface Car { public void drive(); } // 具体产品角色 public class BwmCar ...
- **Simple Factory(简单工厂模式)**:通过提供一个创建产品实例的方法,使得客户无需指定产品的具体类,从而降低了客户端与产品类间的耦合。 - **Abstract Factory(抽象工厂模式)**:为创建一系列相关或相互...
简单工厂模式 (Simple Factory Pattern) 简单工厂模式是工厂模式的一种变体,尽管它并未被归类于GoF所提出的23种设计模式之中,但它依然是一种非常实用的设计模式。简单工厂模式的主要作用在于封装实例化的细节,...
设计模式学习笔记,此项目参考《大话设计模式》,只能作为入门级设计模式学习 设计原则 职责单一原则 开放-封闭原则 依赖倒转原则 高层模块不依赖底层模块,两个模块都应该依赖抽象。抽象不依赖细节,细节依赖抽象。...
### 设计模式学习笔记知识点概览 #### 一、引言 设计模式是软件工程领域中一种非常重要的概念,它代表了一种最佳实践的方式,帮助开发者解决特定问题时能够更加高效、灵活。良葛格的《Design Pattern学习笔记》不仅...
### Spring学习笔记1 #### 一、Spring框架简介与IOC概念 **Spring**是一个开源的Java平台框架,它提供了一种全面的编程模型,并通过一系列的功能模块支持企业级应用程序开发。Spring的核心特性包括依赖注入...
10. **设计模式**:在J2EE开发中常见的设计模式,如MVC(Model-View-Controller)、Singleton、Factory等。 11. **性能优化和测试**:涉及J2EE应用的性能监控、调优策略,以及单元测试和集成测试的工具和方法。 12...
综上所述,通过本篇笔记的学习,读者可以全面掌握RabbitMQ的基本使用方法以及一些高级特性,这对于实际项目中的消息处理需求提供了强有力的支持。无论是简单的消息传输还是复杂的分布式系统架构设计,RabbitMQ都能...