设计模式之抽象工厂

动机:

在软件系统中,经常面临着”一系列相互依赖的对象“的创建工作;同时,由于需求的变化,往往存在更多系列对象的创建工作。如何应对这种变化?如何绕过常规对象创建方法,提供一种”封装机制“来避免客户程序和这种“多系列”具体对象创建工作的紧耦合。

意图:

提供一个接口,让该接口负责创建一系列“相关或者相互依赖的对象”,无需指定他们具体的类——《设计模式》GoF

Abstract Factroy模式的几个要点:

1、如果没有应对“多系列对象构建”的需求变化,则没有必要使用Abstract Factroy模式,这时候使用简单静态工厂完全可以。
2、“系列对象”指的是这些对象之间有相互依赖、或作用的关系,例如游戏开发场景中的“道路”与“房屋”的依赖,“道路”与“地道”的依赖。
3、Abstract Factory模式主要在于应对“新系列”的需求变动。其缺点在于难以应对“新对象”的需求变动。
4、Abstract Factory模式经常和Factroy Method模式共同组合来应对“对象创建”的需求变化。

Abstract Factory结构图:

                                             

代码示例:

游戏场景分为古典、现代,游戏场景响应的接口:

public abstract class Road{
	public abstract void road();
}

public abstract class Building{
	public abstract void build();
}

public abstract class Tunnel{
	public abstract void tunnel();
}

public abstract class Jungle{
	public abstract void jungle();
}

public abstract class MethodFactory{
	public abstract Road creatRoad();
	public abstract Building creatBuilding();
	public abstract Tunnel creatTunnel();
	public abstract Jungle creatJungle();
}

现代场景的创建:

public class ModernRoad extends Road{
	@Override
	public void road() {
		// TODO Auto-generated method stub
		System.out.println("ModernRoad");
	}
}

public class ModernBuilding extends Building{

	@Override
	public void build() {
		// TODO Auto-generated method stub
		System.out.println("ModernBuilding");
	}
}

public class ModernTunnel extends Tunnel{
	@Override
	public void tunnel() {
		// TODO Auto-generated method stub
		System.out.println("ModernTunnel");
	}
	
}

public class ModernJungle extends Jungle{
	@Override
	public void jungle() {
		// TODO Auto-generated method stub
		System.out.println("ModernJungle");
	}
}

public class ModernMehodFatory extends MethodFactory{
	@Override
	public Road creatRoad() {
		// TODO Auto-generated method stub
		return new ModernRoad();
	}

	@Override
	public Building creatBuilding() {
		// TODO Auto-generated method stub
		return new ModernBuilding();
	}

	@Override
	public Tunnel creatTunnel() {
		// TODO Auto-generated method stub
		return new ModernTunnel();
	}

	@Override
	public Jungle creatJungle() {
		// TODO Auto-generated method stub
		return new ModernJungle();
	}
	
}

使用场景:

1、QQ换肤

 2、数据库访问程序设计,不同的数据库访问方式可能不一样。

拓展连接:http://liuling123.com/2013/02/design-partten-factory.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值