文档章节

3.抽象工厂模式

小思绪跌跌撞撞仰望天空
 小思绪跌跌撞撞仰望天空
发布于 2016/07/20 13:33
字数 431
阅读 2
收藏 0

抽象产品类A

package com.lw.pd.AbstractFactory;
/*
 * 抽象产品类A
*/
public abstract class AbstractProductA {
	//每个产品共有的方法
	public void shareMethod(){}
	//每个产品相同的方法,不同的实现
	public abstract void doSomething();
}

产品实现类A1

package com.lw.pd.AbstractFactory;
/*产品A1的实现类
*/
public class ProductA1 extends AbstractProductA {

	@Override
	public void doSomething() {
		// TODO Auto-generated method stub
		System.out.println("产品A1的实现方法");
	}

}

产品实现类A2

package com.lw.pd.AbstractFactory;
/*
 * 产品A2的实现类
*/
public class ProductA2 extends AbstractProductA {

	@Override
	public void doSomething() {
		// TODO Auto-generated method stub
		System.out.println("产品A2的实现方法");
	}

}

抽象产品类B

package com.lw.pd.AbstractFactory;
/*
 * 抽象产品类B
*/
public abstract class AbstractProductB {
	//每个产品共有的方法
	public void shareMethod(){}
	//每个产品相同的方法,不同的实现
	public abstract void doSomething();
}

产品实现类B1

package com.lw.pd.AbstractFactory;

public class ProductB1 extends AbstractProductB {

	@Override
	public void doSomething() {
		// TODO Auto-generated method stub
		System.out.println("产品B1的实现方法");
	}

}

产品实现类B2

package com.lw.pd.AbstractFactory;

public class ProductB2 extends AbstractProductB {

	@Override
	public void doSomething() {
		// TODO Auto-generated method stub
		System.out.println("产品B2的实现方法");
	}

}

抽象工厂方法

package com.lw.pd.AbstractFactory;
/*
 * 抽象工厂方法
*/
public abstract class AbstractCreator {
	//创建A产品家族
	public abstract AbstractProductA createProductA();
	//创建B产品家族
	public abstract AbstractProductB createProductB();
}

产品X1的实现类

package com.lw.pd.AbstractFactory;
/*
 * 产品等级1的实现类
*/
public class Creator1 extends AbstractCreator {

	@Override
	public AbstractProductA createProductA() {
		// TODO Auto-generated method stub
		
		return new ProductA1();
	}

	@Override
	public AbstractProductB createProductB() {
		// TODO Auto-generated method stub
		return new ProductB1();
	}

}

产品X2的实现类

package com.lw.pd.AbstractFactory;

public class Creator2 extends AbstractCreator {

	@Override
	public AbstractProductA createProductA() {
		// TODO Auto-generated method stub
		return new ProductA2();
	}

	@Override
	public AbstractProductB createProductB() {
		// TODO Auto-generated method stub
		return new ProductB2();
	}

}

场景类

package com.lw.pd.AbstractFactory;
/*
 * 场景类
*/
public class Client {
	public static void main(String[] args) {
		//定义2个工厂
		AbstractCreator creator1 = new Creator1();
		AbstractCreator creator2 = new Creator2();
		//产生A1对象
		AbstractProductA a1 =  creator1.createProductA();
		//产生A2对象
		AbstractProductA a2 = creator2.createProductA();
		//产生B1对象
		AbstractProductB b1 = creator1.createProductB();
		//产生B2对象
		AbstractProductB b2 = creator2.createProductB();
		//继续业务逻辑
	}
}

 

© 著作权归作者所有

共有 人打赏支持
上一篇: 4.模板方法模式
下一篇: 2.工厂方法模式
小思绪跌跌撞撞仰望天空
粉丝 0
博文 23
码字总数 6998
作品 0
武汉
程序员
私信 提问
PHP设计模式(一):简介及创建型模式

我们分三篇文章来总结一下设计模式在PHP中的应用,这是第一篇创建型模式。 一、设计模式简介 首先我们来认识一下什么是设计模式: 设计模式是一套被反复使用、容易被他人理解的、可靠的代码设...

juhenj
2014/05/15
228
2
炒冷饭系列:设计模式 抽象工厂模式

炒冷饭系列:设计模式 抽象工厂模式 摘要: 原创出处: http://www.cnblogs.com/Alandre/ 泥沙砖瓦浆木匠 希望转载,保留摘要,谢谢! 亲爱我,孝何难;亲恶我,孝方贤。 一、什么是抽象工厂模...

泥沙砖瓦浆木匠
2014/07/24
0
0
23种设计模式(3):抽象工厂模式

定义:为创建一组相关或相互依赖的对象提供一个接口,而且无需指定他们的具体类。 类型:创建类模式 类图: 抽象工厂模式与工厂方法模式的区别 抽象工厂模式是工厂方法模式的升级版本,他用来...

LCZ777
2014/07/05
0
0
设计模式之抽象工厂模式(创建型)

模式定义 抽象工厂模式(Abstract Factory Pattern):提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们具体的类。抽象工厂模式又称为Kit模式,属于对象创建型模式。 模式角色 抽象...

smileNicky
01/01
0
0
设计模式梳理(一)

设计模式梳理(一) 总体来说设计模式分为三大类: @案例源码地址:https://gitlab.com/lxqxsyu/DisgnPattern 创建型模式 简单工厂模式 工厂类是整个模式的关键。它包含必要的判断逻辑,能够...

lxq_xsyu
2017/11/02
0
0

没有更多内容

加载失败,请刷新页面

加载更多

C++ vector和list的区别

1.vector数据结构 vector和数组类似,拥有一段连续的内存空间,并且起始地址不变。 因此能高效的进行随机存取,时间复杂度为o(1); 但因为内存空间是连续的,所以在进行插入和删除操作时,会造...

shzwork
今天
3
0
Spring之invokeBeanFactoryPostProcessors详解

Spring的refresh的invokeBeanFactoryPostProcessors,就是调用所有注册的、原始的BeanFactoryPostProcessor。 相关源码 public static void invokeBeanFactoryPostProcessors(Configu......

cregu
昨天
4
0
ibmcom/db2express-c_docker官方使用文档

(DEPRECIATED) Please check DB2 Developer-C Edition for the replacement. What is IBM DB2 Express-C ? ``IBM DB2 Express-C``` is the no-charge community edition of DB2 server, a si......

BG2KNT
昨天
3
0
Ubuntu 18.04.2 LTS nvidia-docker2 : 依赖: docker-ce (= 5:18.09.0~3-0~ubuntu-bionic)

平台:Ubuntu 18.04.2 LTS nvidia-docker2 版本:2.0.3 错误描述:在安装nvidia-docker2的时候报dpkg依赖错误 nvidia-docker2 : 依赖: docker-ce (= 5:18.09.0~3-0~ubuntu-bionic) 先看一下依......

Pulsar-V
昨天
4
0
学习笔记1-goland结构体(struct)

写在前面:若有侵权,请发邮件by.su@qq.com告知。 转载者告知:如果本文被转载,但凡涉及到侵权相关事宜,转载者需负责。请知悉! 本文永久更新地址:https://my.oschina.net/bysu/blog/3036...

不最醉不龟归
昨天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部