提供了比工厂模式更高一级的接口级,用于返回若个工厂之一。这个模式是属于创建模式之一。有几点值得注意:
- 对象的创建充分重用重要的代码。
- 对象的创建需要访问某个信息或者资源时,这对象不应该包含在组合类中。
- 一般对象生命周期管理必须集中化,确保应用程序中行为的一致性。
分析一个例子,如下:
定义一个枚举类型的CarType类,列出车的类型。
public enum CarType {
SMALL, SEDAN, LUXURY
}
抽象Car类,所有的子类扩展Car这个类实现自己的特有功能。
public abstract class Car {
private CarType model = null;
public Car(CarType model) {
this.model = model;
arrangeParts();
}
private void arrangeParts() {
// Do one time processing here
}
// Do subclass level processing in this method
protected abstract void construct();
public CarType getModel() {
return model;
}
public void setModel(CarType model) {
this.model = model;
}
}
分别定义SmallCar、Sedan和Luxury类。
public class SmallCar extends Car{
SmallCar() {
super(CarType.SMALL);
construct();
}
@Override
protected void construct() {
System.out.println("Building small car");
// add accessories
}
}
public class SedanCar extends Car {
SedanCar() {
super(CarType.SEDAN);
construct();
}
@Override
protected void construct() {
System.out.println("Building sedan car");
// add accessories
}
}
public class LuxuryCar extends Car {
LuxuryCar() {
super(CarType.LUXURY);
construct();
}
@Override
protected void construct() {
System.out.println("Building luxury car");
// add accessories
}
}
定义FactoryCar工厂类,现实具体的调用。
public class CarFactory {
public static Car buildCar(CarType model) {
Car car = null;
switch (model) {
case SMALL:
car = new SmallCar();
break;
case SEDAN:
car = new SedanCar();
break;
case LUXURY:
car = new LuxuryCar();
break;
default:
// throw some exception
break;
}
return car;
}
}
测试工厂类,单元测试如下:
public class CarFactoryTest {
@SuppressWarnings("deprecation")
@Test
public void testCarFactory() {
Assert.assertEquals(true, CarFactory.buildCar(CarType.SMALL) instanceof Car) ;
Assert.assertEquals(true, CarFactory.buildCar(CarType.SEDAN) instanceof Car) ;
Assert.assertEquals(true, CarFactory.buildCar(CarType.LUXURY) instanceof Car) ;
}
}
输出结果如下:
Building small car
Building sedan car
Building luxury car
工厂模式的使用场合:
1.创建相关的家族或是依赖对象,比如Kit.
2. 提供一个产品类库,显露接口,但是不包括实现。
3. 修要从超类哪里隔离具体的实现类.
4. 系统需要独立出系统的产品如何创建、组合和呈现。
如果你想做一深入的研究,可以查阅Java API代码.
分享到:
相关推荐
Head First 设计模式 (四) 工厂模式(factory pattern) C++实现
Head.First设计模式中的The Factory Pattern(工厂模式)ppt
5、工厂方法模式FACTORY METHOD PATTERN 6、抽象工厂模式ABSTRACT FACTORY PATTERN 7、门面模式FACADE PATTERN 8、适配器模式ADAPTER PATTERN 9、模板方法模式TEMPLATE METHOD PATTERN 10、建造者模式BUILDER ...
抽象工厂模式(Abstract Factory Pattern) 引入: 在前面介绍的两个创建型模式里面,我们解决的都是有关"new"的问题,用它们来避免显式指定类创建对象。我写的也非常简单易懂,相信看过的朋友们都应该对简单工厂...
NULL 博文链接:https://lym6520.iteye.com/blog/698013
用Java实现23种设计模式 1. 创建型模式 工厂模式(Factory Pattern) 抽象工厂模式(Abstract Factory Pattern) 单例模式(Singleton Pattern) 建造者模式(Builder Pattern) 原型模式(Prototype Pattern)...
工厂模式(Factory Pattern) 抽象工厂模式(Abstract Factory Pattern) 单例模式(Singleton Pattern) 建造者模式(Builder Pattern) 原型模式(Prototype Pattern) 2 结构型模式 这些设计模式关注类和对象的...
23种设计模式(Design Pattern)的C++实现范例,包括下面列出的各种模式,代码包含较详细注释。另外附上“设计模式迷你手册.chm” 供参考。 注:项目在 VS2008 下使用。 创建型: 抽象工厂模式(Abstract Factory) ...
备忘录模式(Memento Pattern) 策略模式(Strategy Pattern) 抽象工厂模式(Abstract Factory Pattern) 代理模式(Proxy Pattern) 单例模式(Singleton Pattern) 迭代器模式(Iterator Pattern) 访问者模式(Visitor ...
简单工厂(Simple Factory)模式又称为静态工厂方法(Static Factory Method)模式,属于类的创建型模式,通常它根据自变量的不同返回不同的类的实例。 简单工厂模式的实质是由一个工厂类根据传入的参量,动态决定...
今天小编就为大家分享一篇关于PHP设计模式之工厂模式(Factory Pattern)的讲解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
工厂方法模式(Factory Method Pattern) 抽象工厂模式(Abstract Factory Pattern) 建造者模式(Builder Pattern) 原型模式(Prototype Pattern) 单例模式(Singleton Pattern) 结构型模式用来...
NULL 博文链接:https://lym6520.iteye.com/blog/701742
NULL 博文链接:https://jacky-dai.iteye.com/blog/2294531
36种最新设计模式整理 Design Pattern: Simple Factory 模式 Design Pattern: Abstract Factory 模式 Design Pattern: Builder 模式 Design Pattern: Factory Method 模式 Design Pattern: Prototype 模式 ...
工厂方法模式[FACTORY METHOD PATTERN] 抽象工厂模式[ABSTRACT FACTORY PATTERN] 门面模式[FACADE PATTERN] 适配器模式[ADAPTER PATTERN] 模板方法模式[TEMPLATE METHOD PATTERN] 建造者模式[BUILDER PATTERN] 策略...
工厂方法模式(Factory Method) 5. 原型模式(Prototype)结构型: 6. 适配器模式(Adapter Pattern) 7. 桥接模式(Bridge Pattern) 8. 装饰模式(Decorator Pattern) 9. 组合模式(Composite Pattern) 10. 外观模式...
设计模式概述 (100%) 设计模式面面观(2):设计模式基本要素与原则 (100%) 设计模式面面观(3):单件模式(Singletion)-创建型模式 (100%) 设计模式面面观(4):工厂模式(Factory)-创建型模式 (100%...
1.1 什么是设计模式 2 1.2 Smalltalk MVC中的设计模式 3 1.3 描述设计模式 4 1.4 设计模式的编目 5 1.5 组织编目 7 1.6 设计模式怎样解决设计问题 8 1.6.1 寻找合适的对象 8 1.6.2 决定对象的粒度 9 1.6.3 指定对象...