博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
设计模式-工厂(抽象工厂模式)
阅读量:5764 次
发布时间:2019-06-18

本文共 1880 字,大约阅读时间需要 6 分钟。

hot3.png

抽象工厂模式是所有形态的工厂模式中最为抽象和最其一般性的。抽象工厂模式可以向客户端提供一个接口,使得客户端在不必指定产品的具体类型的情况下,能够创建多个产品族的产品对象。1.抽象工厂(Creator)角色抽象工厂模式的核心,包含对多个产品结构的声明,任何工厂类都必须实现这个接口。2.具体工厂( Concrete Creator)角色具体工厂类是抽象工厂的一个实现,负责实例化某个产品族中的产品对象。3.抽象(Product)角色 抽象模式所创建的所有对象的父类,它负责描述所有实例所共有的公共接口。4.具体产品(Concrete Product)角色抽象模式所创建的具体实例对象

看代码吧:

1、抽象产品1:

public abstract class Boy {	abstract void run();}

2、抽象产品2:
public abstract class Girl {	abstract void makeUp();}

3、具体产品1:
public class BlackBoy extends Boy {	@Override	void run() {		System.out.println("this is BlackBoy run!");	}}

4、具体产品2:
public class YellowBoy extends Boy {	@Override	void run() {		System.out.println("this is YellowBoy run!");	}}

6、具体产品3:
public class BlackGirl extends Girl {	@Override	void makeUp() {		System.out.println("this is BlackGirl  makeup!");	}}

7、具体产品4: 
public class YellowGirl extends Girl {	@Override	void makeUp() {		System.out.println("this is YellowGirl is makeup!");	}}

8、抽象工厂:
public abstract class PeopleFactory {	abstract Boy createBoy();	abstract Girl createGirl();}

9、具体工厂1:
public class BlackPeopleFacotry extends PeopleFactory {	@Override	Boy createBoy() {		return new BlackBoy();	}	@Override	Girl createGirl() {		return new BlackGirl();	}}

10、具体工厂2: 
public class YellowPeopleFacotry extends PeopleFactory {	@Override	Boy createBoy() {		return new YellowBoy();	}	@Override	Girl createGirl() {		return new YellowGirl();	}}

11、测试类:
public class TestClass {	public static void main(String[] args) {		PeopleFactory factory = new BlackPeopleFacotry();		Boy boy =  factory.createBoy();		Girl girl =  factory.createGirl();		boy.run();		girl.makeUp();						factory = new YellowPeopleFacotry();		boy =  factory.createBoy();		girl =  factory.createGirl();		boy.run();		girl.makeUp();	}}

输出 :
this is BlackBoy run!this is BlackGirl  makeup!this is YellowBoy run!this is YellowGirl is makeup!

转载于:https://my.oschina.net/xiaoyang818/blog/64113

你可能感兴趣的文章
(Portal 开发读书笔记)Portlet间交互-PortletSession
查看>>
搭建vsftpd服务器,使用匿名账户登入
查看>>
AMD改善Linux驱动,支持动态电源管理
查看>>
JAVA中循环删除list中元素的方法总结
查看>>
Java虚拟机管理的内存运行时数据区域解释
查看>>
人人都会深度学习之Tensorflow基础快速入门
查看>>
ChPlayer播放器的使用
查看>>
js 经过修改改良的全浏览器支持的软键盘,随机排列
查看>>
Mysql读写分离
查看>>
Oracle 备份与恢复学习笔记(5_1)
查看>>
Oracle 备份与恢复学习笔记(14)
查看>>
分布式配置中心disconf第一部(基本介绍)
查看>>
Scenario 9-Shared Uplink Set with Active/Active uplink,802.3ad(LACP)-Flex-10
查看>>
UML类图中的六种关系
查看>>
探寻Interpolator源码,自定义插值器
查看>>
一致性哈希
查看>>
mysql(待整理)
查看>>
看雪论坛502,出现安全宝?
查看>>
使用PullToRefresh实现下拉刷新和上拉加载
查看>>
mysql
查看>>