文档章节

易学设计模式看书笔记(4) - 抽象工厂模式

sitaluoduoxi
 sitaluoduoxi
发布于 2016/07/26 22:13
字数 701
阅读 2
收藏 0
 本文内容来自书上,不懂设计模式,只求混个眼熟。
三、抽象工厂模式
1.动物管理系统的例子
public interface Animal{

  public void eat();

}

public class Tiger implements Animal
{
	public void eat(){
		sysout.out.println("老虎会吃");
	};
	public void run(){
		sysout.out.println("老虎会跑");
	};
}

public class Dolphin implements Animal
{
	public void eat(){
		sysout.out.println("海豚会吃");
	};
	public void swim(){
		sysout.out.println("海豚会游泳");
	};
}

下面的和简单工厂模式有区别了。
为了区分亚洲虎和非洲虎,亚洲海豚和非洲海豚,还需要创建四个相应的类:
亚洲虎类和非洲虎类,亚洲海豚和非洲海豚类。
public class AsiaTriger extends Triger
{
	public void run(){
		System.out.println("亚洲老虎在跑");
	}
	public void eat(){
		System.out.println("亚洲老虎吃东西");
	}
}
public class AfricaTriger extends Triger
{
	public void run(){}
	public void eat(){}
}
public class AfricaDolphin extends Dolphin
{

}
public class AfricaDophin extends Dolphin
{

}

然后设计一个只负责定义创建方式的抽象工厂类:

public interface Factory
{
	Triger createTriger();
	Dolphin createDolphin();
}

再设计适合亚洲老虎,亚洲海豚的具体工厂类;

public class AsiaFactory implements Factory
{
	public Triger createTriger(){
	    return new AsiaTriger();
	};
	public Dolphin createDolphin(){
		return new AsiaDolphin();
	};
}

再设计适合非洲老虎,非洲海豚的具体工厂类;

public class AfricaFactory implements Factory
{
	public Triger createTriger(){
	    return new AfricaTriger();
	};
	public Dolphin createDolphin(){
		return new AfricaDolphin();
	};
}

public class Client
{
	public static void main(String[] args) 
	{
		Factory factory = new AsiaFactory();
		factory.createTriger();
	}
}

 

 

 

2.抽象工厂模式简介

【定义】:
如果客户端需要创建一些产品结构,而这些产品结构由分别属于
不同的产品类别,则可以使用抽象工厂模式,抽象工厂模式中的
抽象工厂类负责定义创建对象的接口,而这一系列对象的创建工作由实现
抽象工厂类的具体工厂类来完成。

【原理】:

抽象工厂模式主要有四部分组成:抽象工厂类,实现抽象工厂类的
具体实现类、抽象类和实现抽象类的具体实现类。

原理图如下:

【使用时机】:当系统创建一系列相互关联的对象时,就需要时用抽象工厂模式。

3.优缺点:

【优点】:
在抽象工厂模式中,客户端不再需要负责对象的创建,而是把这个责任
交给了具体的工厂类,客户端只负责对对象的调用,明确了各个类的职责。
当一系列相互关联的产品被设计到一个工厂里面后,客户端的调用变得简单,
而且,更换这一列的产品时,只需要更换一个工厂类即可。

【缺点】:
如果有新的产品加进来,则需要修改抽象工厂类的设计,并同时修改实现这个
抽象工厂类的具体实现类,需要额外编写代码,增加了工作量。

© 著作权归作者所有

共有 人打赏支持
sitaluoduoxi
粉丝 0
博文 33
码字总数 24992
作品 0
广州
后端工程师
私信 提问
设计模式梳理(一)

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

lxq_xsyu
2017/11/02
0
0
【设计模式笔记】(十六)- 代理模式

一、简述 代理模式(Proxy Pattern),为其他对象提供一个代理,并由代理对象控制原有对象的引用;也称为委托模式。 其实代理模式无论是在日常开发还是设计模式中,基本随处可见,中介者模式中...

MrTrying
2018/06/24
0
0
炒冷饭系列:设计模式 抽象工厂模式

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

泥沙砖瓦浆木匠
2014/07/24
0
0
Java经典设计模式-结构型模式-适配器模式(Adapter)

适配器模式 适配器模式主要分为三类:类的适配器模式、对象的适配器模式、接口的适配器模式。 适配器模式将某个类的接口转换成客户端期望的另一个接口表示,目的是消除由于接口不匹配所造成的...

Idea
2018/01/20
0
0
设计模式之抽象工厂模式(创建型)

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

smileNicky
01/01
0
0

没有更多内容

加载失败,请刷新页面

加载更多

day11

architect刘源源
17分钟前
2
0
论学好Linux系统的超级重要性

不知道各位在日常的工作生活中有没有接触过“rm -rf /*”这个命令,因为这个命令搞出来的事情可还不少呢!前段时间就在一个群里看到了有个小伙子,老板让他去维护一下服务器,这小伙也不太懂...

Linux就该这么学
昨天
1
0
git 使用

1,首先在github配置好信息和仓库,然后在本地进行操作 git init git config user.name 'zhangwuer' git config user.email '56789053@qq.com' 2,与远程分支建立连接 git checkout -b test......

天王盖地虎626
昨天
3
0
git checkout 命令详解

在日常的git操作中,git checkout——检出,是我们的常用命令。最为常用的两种情形是创建分支和切换分支。 在下面的命令中,使用了一些简写,在这里说明一下: git st # git statusgit ci ...

shzwork
昨天
8
0
【Nginx】Nginx多级代理,获取客户端真实请求IP以及每级代理IP

Nginx多级代理,获取客户端真实请求IP以及每级代理IP 如图所示,每一级nginx里的location配置里需要加上对应的配置,最后一级nginx是直接到应用,测试时为了方便,直接用echo模块去测试,打印...

薛定谔的旺
昨天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部