package factory;
/**
* @author jiq
* 类型:Creational
* 定义: 工厂方法模式(Factory Method)定义一个创建对象的接口,但由子类决定
* 要实例化的类是哪一个。 工厂方法将类的实例化推迟到子类。
* OO原则: 要依赖抽象,而不要依赖具体类
*/
/************
* Pizza商店
* **********/
abstract class PizzaStore{
public Pizza oderPizza(String type){
Pizza pizza;
/**
* 提供抽象接口来创建“具体产品”
* 超类并不知道正在创建的是什么pizza
* */
pizza = createPizza(type);
pizza.prepare();
pizza.bake();
pizza.cut();
pizza.box();
return pizza;
}
/**
* 工厂方法来处理具体对象的创建,
* 并将这样的创建推迟到子类中。
* 这样客户程序中关于超类的代码就和创建子类的代码解耦了
*
* 并不涉及具体类的创建,而是将各种pizza的创建交给各个商店
* */
abstract Pizza createPizza(String type);
}
//纽约Pizza店
class NYPizzaStore extends PizzaStore{
//子类实现工厂方法来创建具体的Pizza
public Pizza createPizza(String type) {
if(type.equals("cheese")){
return new NYSytleCheesePizza();
}
else if(type.equals("viggie")){
return new NYSytleViggiePizza();
}
else if(type.equals("clam")){
return new NYSytleClamPizza();
}
else return null;
}
}
//芝加哥Pizza店
class ChicagoPizzaStore extends PizzaStore{
//子类实现工厂方法来创建具体的Pizza
public Pizza createPizza(String type) {
if(type.equals("cheese")){
return new ChicagoStyleCheesePizza();
}
else if(type.equals("clam")){
return new ChicagoStyleClamPizza();
}
else return null;
}
}
/********************************
* Pizza
* ******************************/
abstract class Pizza{
String name;
String dough;
String sauce;
void prepare(){System.out.println("Preparing:"+name);}
void bake(){System.out.println("Bake 25 minutes at 250");}
void cut(){System.out.println("Cutting the Pizza");}
void box(){System.out.println("Box it in cartton box");}
}
/**
* 各种纽约风格的Pizza
* */
class NYSytleCheesePizza extends Pizza{}
class NYSytleViggiePizza extends Pizza{}
class NYSytleClamPizza extends Pizza{}
/**
* 各种芝加哥风格的Pizza
* */
class ChicagoStyleCheesePizza extends Pizza{}
class ChicagoStyleClamPizza extends Pizza{}
/**
* 客户端程序,客户预订Pizza
* */
public class FactoryMethod {
public static void main(String[] args) {
/* 创建两个Pizza商店 */
PizzaStore nyStore = new NYPizzaStore();
PizzaStore cgStore = new ChicagoPizzaStore();
/* 使用PizzaStore下订单 */
Pizza pizza1 = nyStore.oderPizza("cheese");
Pizza pizza2 = cgStore.oderPizza("cheese");
}
}
分享到:
相关推荐
**简单工厂模式**是软件设计模式中的一种,属于创建型模式。在Java编程中,它是一种用于创建对象的简便方法,将对象的实例化过程封装到一个单独的工厂类中,使得客户端代码无需直接调用具体类的构造函数,而是通过...
在软件设计模式中,工厂模式是一种非常常见的创建型模式,用于封装对象的创建过程,使得客户端无需关注具体的对象实例化细节。本篇文章将对三种主要的工厂模式:简单工厂、工厂方法和抽象工厂进行深入的对比和总结。...
工厂方法模式是面向对象设计模式中的一个创建型模式,它提供了一种封装对象创建过程的方式,使得具体的对象创建过程可以延迟到子类中进行。在C++编程中,工厂方法模式广泛应用于各种软件设计中,因为它能有效地解耦...
工厂方法模式作为创建型模式中的一种,提供了一种创建对象的优雅方式,它不仅使对象的创建与使用分离,还极大地提高了系统的扩展性和灵活性。本文将深入探讨工厂方法模式的内部机制,以及通过反射和配置文件技术增强...
工厂方法模式是面向对象设计中的一种经典设计模式,属于创建型模式。在软件工程中,当我们需要创建一系列相关或相互依赖的对象时,而不希望指定具体的类,工厂方法模式提供了一个很好的解决方案。 工厂方法模式的...
抽象工厂模式是设计模式中的一种,它属于对象创建型模式,主要解决的是当系统需要创建一组相关或相互依赖的对象时,而这些对象的类在运行时可能未知的问题。这种模式提供了一个接口,用于创建相关或依赖对象的家族,...
工厂方法是创建型模式,它提供了一种封装对象创建过程的方式,使得创建过程独立于使用它的客户端。 工厂方法模式的核心思想在于定义一个创建对象的接口,但让实现这个接口的类决定实例化哪一个类。这种将实例化推迟...
工厂方法是面向对象设计模式的一种,属于创建型模式。这个模式定义了一个创建对象的接口,但让子类决定实例化哪一个类。工厂方法让类的实例化推迟到子类中进行,从而增加了系统的灵活性。 一、工厂方法模式的基本...
工厂方法作为其中一种创建型设计模式,是Java程序员必须掌握的核心技能之一。这个模式的主要目标是提供一个接口来创建对象,但允许子类决定实例化哪一个类。这样,工厂方法将一个类的实例化延迟到了子类,使得代码更...
工厂方法(Factory Method)是面向对象设计模式中的一种,属于创建型模式。它定义了一个创建对象的接口,但让子类决定实例化哪一个类。工厂方法让一个类的实例化推迟到子类。 **概念理解** 1. **工厂角色...
工厂方法(Factory Method)是创建型设计模式之一,属于行为模式。它的主要作用是定义一个创建对象的接口,让子类决定实例化哪一个类。这样,工厂方法可以使一个类的实例化延迟到其子类进行,提供了一种将具体创建...
抽象工厂模式是创建型设计模式的一种,它提供了一种创建对象族(一组具有相互依赖关系的对象)的方法,而无需指定具体类。这种模式的核心在于它允许客户端代码与具体实现细节解耦,使得更换一个产品族变得更为容易。...
在某些情况下,可以考虑使用其他创建型模式,如工厂方法模式、抽象工厂模式或构建者模式,以适应更复杂的需求。例如,工厂方法模式允许子类决定具体的产品实例,而抽象工厂模式则处理一组相关的或相互依赖的对象的...
今天,我们将着重解析两种在创建对象方面应用广泛的设计模式——工厂方法模式和简单工厂模式,深入探讨它们的原理和应用。 首先,简单工厂模式是众多设计模式中最简单的形式之一。该模式利用一个静态工厂类来创建...
工厂方法模式是创建型设计模式中的一种,它的目的是定义一个创建对象的接口,但让子类来决定实例化哪一个类。工厂方法模式将对象的实例化推迟到子类中进行,这样做可以使得创建过程更加灵活,符合“开闭原则”——对...
**工厂模式**是一种常见的设计模式,属于创建型模式,它提供了一种创建对象的最佳方式。在工厂模式中,当我们创建对象时,不会直接实例化具体类,而是通过一个工厂类来生产所需的对象。这种模式的核心在于封装了对象...
工厂方法模式是设计模式中的一种创建型模式,它在软件工程中扮演着非常重要的角色。这个模式的主要目的是提供一个创建对象的接口,但允许子类决定实例化哪一个类。这样,工厂方法模式使得一个类的实例化延迟到了其...
Java设计模式中的工厂模式是一种创建型模式,它提供了一种创建对象的最佳方式。在工厂模式中,当客户端请求创建一个产品对象时,它不会直接创建,而是调用一个工厂对象来完成创建工作。这种模式的核心在于封装了对象...
这些模式都是创建型设计模式,它们的核心目标是为对象的创建提供一种抽象,使得客户端代码不必关心具体的对象实现,而是通过一个共同的接口或类来获取所需的对象。 1. **简单工厂模式**: - 定义:在简单工厂模式...