提供创建对象的接口。
可以做一些初始化工作等,尤其是在对象的关系比较复杂的情况下,好处更加明显。
工厂模式一般与单例模式配合使用。
工厂模式分为两种:工厂方法(Factory Method),抽象工厂(Abstract Factory)。
工厂方法
FactoryMethod.java
package com.gary.designpattern.factory.factorymethod;
import com.gary.designpattern.factory.obj.Obj;
import com.gary.designpattern.factory.obj.ObjA;
import com.gary.designpattern.factory.obj.ObjB;
/**
* 工厂方法
* @author gary
*
*/
public class FactoryMethod {
public Obj createObj(String ObjName){
if("ObjA".equals(ObjName)){
return new ObjA();
}else if("ObjB".equals(ObjName)){
return new ObjB();
}else{
return null;
}
}
}
Test.java
package com.gary.designpattern.factory.factorymethod;
import com.gary.designpattern.factory.obj.Obj;
/**
* 测试
* @author gary
*
*/
public class Test {
public static void main(String[] args) {
FactoryMethod factory = new FactoryMethod();
Obj oa = factory.createObj("ObjA");
oa.hello();
Obj ob = factory.createObj("ObjB");
ob.hello();
}
}
抽象工厂
Factory.java
package com.gary.designpattern.factory.abstractfactory;
import com.gary.designpattern.factory.obj.Obj;
/**
* 抽象工厂,用来产生Obj对象,适用于较复杂情况
* @author gary
*
*/
public abstract class Factory {
public abstract Obj createObj();
}
AbstractFactoryA.java
package com.gary.designpattern.factory.abstractfactory;
import com.gary.designpattern.factory.obj.Obj;
import com.gary.designpattern.factory.obj.ObjA;
/**
* 工厂A用来产生ObjA
* @author gary
*
*/
public class AbstractFactoryA extends Factory{
@Override
public Obj createObj() {
return new ObjA();
}
}
AbstractFactoryB.java
package com.gary.designpattern.factory.abstractfactory;
import com.gary.designpattern.factory.obj.Obj;
import com.gary.designpattern.factory.obj.ObjB;
/**
* 工厂B用来产生ObjB
* @author gary
*
*/
public class AbstractFactoryB extends Factory{
@Override
public Obj createObj() {
return new ObjB();
}
}
Test.java
package com.gary.designpattern.factory.abstractfactory;
import com.gary.designpattern.factory.obj.Obj;
/**
* 测试
* @author gary
*
*/
public class Test {
public static void main(String[] args) {
AbstractFactoryA factoryA = new AbstractFactoryA();
Obj oa = factoryA.createObj();
oa.hello();
AbstractFactoryB factoryB = new AbstractFactoryB();
Obj ob = factoryB.createObj();
ob.hello();
}
}
公用Obj
package com.gary.designpattern.factory.obj;
public interface Obj {
public void hello();
}
package com.gary.designpattern.factory.obj;
public class ObjA implements Obj {
@Override
public void hello() {
System.out.println("Hello!This is ObjA.");
}
}
package com.gary.designpattern.factory.obj;
public class ObjB implements Obj {
@Override
public void hello() {
System.out.println("Hello!This is ObjB.");
}
}
分享到:
相关推荐
Simple Factory模式: 定义创建对象的接口,并封装对象的创建。 一般情况下,我们为了提高内聚和松耦合,经常会使用多态来处理一些问题。抽象出一些类的公共接口作为抽象基类或者接口。这样的话,我们将会面临一个...
factory模式是C++里的相关设计模式
对设计模式—Abstract Factory模式的认识
Abstract Factory模式 1 定义创建对象的接口,并封装对象的创建 2 将具体化类的工作延迟到了类中 3 创建创建一组相关对象或者说是一组相互依赖的对象 一般情况下,我们为了提高内聚和松耦合,经常会使用多态来...
Complex Factory模式 1 定义创建对象的接口,并封装对象的创建 2 将具体化类的工作延迟到了类中 一般情况下,我们为了提高内聚和松耦合,经常会使用多态来处理一些问题。抽象出一些类的公共接口作为抽象基类或者...
Java常用设计模式(SingleTon、FactoryMethod、AbstractFactory)
23种设计模式之一(创建型模式)Factory模式
用C++实现AbstractFactory模式,简单易懂。
主要介绍了Java设计模式之工厂模式(Factory模式)介绍,本文讲解了为何使用工厂模式、工厂方法、抽象工厂、Java工厂模式举例等内容,需要的朋友可以参考下
这主要很快地让你了解工厂设计模式,java里面Factory模式的设计过程
在前一节,我们介绍了Strategy模式,并使用此模式实现了一个根据角色的职业来分配技能的范例(实际也就是动态地为类分配方法)。作为一款奇幻RPG,有了职业,我们还应当可以为角色选择种族,比如说:人类(Human)、精灵...
设计模式体现的是一种思想,而思想则是指导行为的一切,理解和掌握了设计模式,并不是说记住了23种(或更多)设计场景和解决策略(实际上这也是很重要的一笔财富),实际接受的是一种思想的熏陶和洗礼,等这种思想...
c++设计模式之factory设计模式
简单工厂模式和抽象工厂模式,我觉的还不错
设计模式-Singleton与Factory
1.1 Factory模式 1.2 AbstactFactory模式 1.3 Singleton模式 1.4 Builder模式 1.5 Prototype模式 2 结构型模式 2.1 Bridge模式 2.2 Adapter模式 2.3 Decorator模式 2.4 Composite模式 2.5 Flyweight模式 2.6 ...
Design Pattern: Simple Factory 模式 Design Pattern: Abstract Factory 模式 Design Pattern: Builder 模式 Design Pattern: Factory Method 模式 Design Pattern: Prototype 模式 Design Pattern: Singleton...
主要为大家详细介绍了C++设计模式之Static Factory模式的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
抽象工厂模式(Abstract Factory Pattern):提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们具体的类。抽象工厂模式又称为Kit模式,属于对象创建型模式。