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

 本文内容来自书上,不懂设计模式,只求混个眼熟。
三、抽象工厂模式
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.优缺点:

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

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

转载于:https://my.oschina.net/u/1987615/blog/718668

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值