设计模式--工厂模式和抽象工厂模式

工厂模式的英文原文是:Define an interface for creating an object, but let subclasses decide which class to instantiate. Factory method lets a class defer instantiation to subclass. 意思是定义一个用于创建对象的接口,让子类决定实例化哪一个类,工厂方法使一个类的实例化延迟到子类。

工厂模式主要是为创建对象提供了接口,工厂模式可分为三类:

简单工厂模式:又叫做静态方法模式,简单工厂模式就是工厂类根据传入的参数决定实例化哪个类的对象。

工厂方法模式:工厂方法模式是new一个对象的替代品,因此在所有需要生成对象的地方都可以使用。它具有良好的封装性,代码结构清晰,如果一个调用者需要一个具体的产品对象,只要知道这个产品的类名即可,不需要知道这个产品的创建过程如何,降低了模块间的耦合度。优秀的扩展性,在增加产品类的情况下,只要适当的修改具体的工厂类就可以适应变化。屏蔽产品类,产品类是如何实现的,调用者不必关心,只需关注产品的接口即可。

抽象工厂:

package com.zz.factory;

/**
 * 抽象工厂
 * @author txxs
 *
 */
public interface Creator {
	/**
	 * 工厂方法
	 * 创建一个产品对象,起输入的参数类型可以自行设置
	 */
	public <T extends Product> T factory(Class<T> c);

}

抽象产品:

package com.zz.factory;

/**
 * 抽象产品
 * @author txxs
 *
 */
public interface Product {
	//产品类提供的公共方法接口
	public void method1();
	public void method2();

}

两个具体的实现:

package com.zz.factory;
/**
 * 具体工厂
 * @author txxs
 *
 */
public class ConcreteCreator implements Creator {

	@Override
	public <T extends Product> T factory(Class<T> c) {
		Product product = null;
		try{
			product = (Product)Class.forName(c.getName()).newInstance();
		}catch(Exception e){

		}
		// TODO Auto-generated method stub
		return (T) product;
	}

}
package com.zz.factory;

public class ConcreteProduct implements Product {

	@Override
	public void method1() {
		// 业务逻辑处理代码

	}

	@Override
	public void method2() {
		// 业务逻辑处理代码

	}

}

抽象工厂模式:它的英文定义是:Provide an interface  for creating families of ralated or dependent objects without specifying their concrete classes.意思是为创建一组相关或互相依赖的对象提供接口,而无须他们的具体实现类。抽象工厂模式是工厂方法的升级版本,针对的是一系列的产品,如果抽象工厂方法中只有一种产品,那么抽象工厂模式就退化为工厂方法模式。

抽象工厂:

package com.zz.abfactory;
/**
 * 抽象工厂
 * @author txxs
 *
 */
public interface AbstractFactory {
	//创建产品A
	public ProductA factoryA();
	//创建产品B
	public ProductB factoryB();

}

测试类:

package com.zz.abfactory;
/**
 * 测试类
 * @author txxs
 *
 */
public class AbstractFactoryTest {

	public static void main(String[] args) {

		//定义两个工厂
		AbstractFactory abstractFactory1 = new ConcreteFactory1();
		AbstractFactory abstractFactory2 = new ConcreteFactory2();

		//生产等级为1的产品A
		ProductA productA1 = abstractFactory1.factoryA();
		//生产等级为2的产品A
		ProductA productA2 = abstractFactory2.factoryA();

		//生产等级为1的产品B
		ProductB productB1 = abstractFactory1.factoryB();
		//生产等级为2的产品B
		ProductB productB2 = abstractFactory2.factoryB();

		//业务处理
		productA1.method1();
		productA2.method1();
		productB1.method1();
		productB2.method1();
	}

}

哈哈,正在学习,源码下载

时间: 2024-08-24 04:37:03

设计模式--工厂模式和抽象工厂模式的相关文章

设计模式(3)抽象工厂模式(Abstract Factory)

设计模式(0)简单工厂模式 设计模式(1)单例模式(Singleton) 设计模式(2)工厂方法模式(Factory Method) 源码地址 0 抽象工厂模式简介 0.0 抽象工厂模式定义 抽象工厂模式一般的书面定义为:提供一个创建一系列相关或相互依赖对象的接口,而无需指定他们具体的类 提供创建接口,无需指定具体实现类,这个原则在简单工厂模式和工厂方法模式篇已经反复讲到了,这是面向接口编程的一个基本准则,很显然,从抽象工厂模式的一般定义中可以看出这也是抽象工厂模式的一个核心,而抽象工厂模式的另

java设计模式 -------- 创建模式 之 抽象工厂模式

本文是自己学习所做笔记,欢迎转载,但请注明出处:http://blog.csdn.net/jesson20121020 工厂方法模式和抽象工厂模式不好区分清楚: 工厂方法模式特点: 1. 一个抽象产品类,可以派生出多个具体产品类. 2. 一个抽象工厂类,可以派生出多个具体工厂类. 3. 每个具体工厂类只能创建一个具体产品类的实例. 抽象工厂模式特点: 1. 多个抽象产品类,每个抽象产品类可以派生出多个具体产品类. 2. 一个抽象工厂类,可以派生出多个具体工厂类. 3. 每个具体工厂类可以创建多个

iOS设计模式——工厂方法(简单工厂模式,工厂方法模式, 抽象工厂模式)

1. 简单工厂模式 如何理解简单工厂,工厂方法, 抽象工厂三种设计模式? 简单工厂的生活场景,卖早点的小摊贩,他给你提供包子,馒头,地沟油烙的煎饼等,小贩是一个工厂,它生产包子,馒头,地沟油烙的煎饼.该场景对应的UML图如下所示: 图1:简单工厂模式UML图 简单工厂模式的参与者: 工厂(Factory)角色:接受客户端的请求,通过请求负责创建相应的产品对象. 抽象产品(Abstract Product)角色: 是工厂模式所创建对象的父类或是共同拥有的接口.可是抽象类或接口. 具体产品(Conc

【C#设计模式——创建型模式】抽象工厂模式

抽象工厂模式比工厂模式具有更高层次的抽象性.当要返回一系列相关类中的某一个,而每个类都能根据需要返回不同的对象时,可以选择这种模式.直接进入示例. 示例描述:完成花园的规划,多种花园种类,每个里面多种植物 编写一个基类Garden,Garden就是抽象工厂.它定义了具体类中的方法,并返回一系列相关类中的某个类. public class Garden { protected Plant center, shade, border; protected bool showCenter, showS

设计模式系列——三个工厂模式(简单工厂模式,工厂方法模式,抽象工厂模式)

原文地址:http://blog.chinaunix.net/uid-25958655-id-4243289.html 简单工厂模式 当需要加法类的时候,调用工厂类的CreateOperate(),要指定制造的Product 例如在大话设计模式P11给的运算工厂例子: public static Operation createOperate(string operate) { Operation oper = null; 12 switch (operate) { case "+":

[设计模式篇]工厂模式和抽象工厂模式

最近在看Head First的Design Pattern,想想去年候捷来学校给我们讲Design Pattern,但当时水平太弱根本听不懂,今年想趁机再好好学一波,候捷反而不来了,哎,人生就是这样,有些机会真的搞不好只有一次了,所以还是要多多珍惜,不然... ... (再水下去估计没人看了,废话少说,这篇就当一个开篇之作吧,虽然已经看了不少了.) Head First这本书用了一个披萨店的例子,从简单工厂(严格来说这不算一种Gof的设计模式,更像是一种编程习惯),到介绍工厂模式,再介绍到抽象工

iOS常用设计模式——工厂方法(简单工厂模式,工厂方法模式, 抽象工厂模式)

1. 简单工厂模式 如何理解简单工厂,工厂方法, 抽象工厂三种设计模式? 简单工厂方法包含:父类拥有共同基础接口,具体子类实现子类特殊功能,工厂类根据参数区分创建不同子类实例.该场景对应的UML图如下所示: 代码结构如下 Animal 类 @interface Animal :NSObject @proterty(nonatomic,strong) NSString *name; -(void)laugh; @end Dog类 @interface Dog:Animal @end Cat类 @i

简单工厂模式、工厂方法模式和抽象工厂模式-设计模式学习

1.简单工厂模式 简单工厂模式是属于创建型模式,又叫做静态工厂方法(StaticFactory Method)模式,但不属于23种GOF设计模式之一.简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例.简单工厂模式是工厂模式家族中最简单实用的模式,可以理解为是不同工厂模式的一个特殊实现. 工厂(Creator)角色 简单工厂模式的核心,它负责实现创建所有实例的内部逻辑.工厂类的创建产品类的方法可以被外界直接调用,创建所需的产品对象. 抽象产品(Product)角色 简单工厂模式所创建的所有

设计模式(3)--抽象工厂模式(Absrtact Factory Pattern)

定义 抽象工厂模式的实质就是提供接口来创建一系列相关或独立的对象而不指定这些对象的具体类. 理解 在软件系统中,经常面临着"一系列相互依赖的对象"的创建工作:同时由于需求的变化,往往存在着更多系列对象的创建工作.如何应对这种变化?如何绕过常规的对象的创建方法(熟悉的new操作符),提供一种"封装机制"来避免客户程序和这种"多系列具体对象创建工作"的紧耦合?这就是我们要说的抽象工厂模式.抽象工厂模式提供了一种方式,可以将一组具有同一主题的单独的工厂

iOS经常使用设计模式——工厂方法(简单工厂模式,工厂方法模式, 抽象工厂模式)

1. 简单工厂模式 怎样理解简单工厂,工厂方法. 抽象工厂三种设计模式? 简单工厂的生活场景.卖早点的小摊贩.他给你提供包子,馒头,地沟油烙的煎饼等,小贩是一个工厂.它生产包子,馒头,地沟油烙的煎饼. 该场景相应的UML图例如以下所看到的: 图1:简单工厂模式UML图 简单工厂模式的參与者: 工厂(Factory)角色:接受client的请求,通过请求负责创建对应的产品对象. 抽象产品(Abstract Product)角色:是工厂模式所创建对象的父类或是共有的接口.但是抽象类或接口. 详细产品