二、抽象工厂模式Abstract Factory(创建型)

抽象工厂可以创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。抽象工厂需要产生一个和产品相同的继承结构,从而产生出可以生产各种产品的工厂,在使用时,我们可以将不同的工厂注入Client,从而产生不同的产品。


Window作为公用的产品系列,包含WindowsWindow和LinuxWindow两个具体的产品,而WidgetFactory作为产品的抽象工厂接口,其中的createWindow方法是可以产生产品,但是它不实现生产的过程,而是由它的子类,WindowsWidgetFactory和LinuxWidgetFactory来实现产品的实现过程。

public interface Window {
	public void show();
}
public class WindowsWindow implements Window{
	@Override
	public void show() {
		System.out.println("Show Windows' window!");
	}

}
public class LinuxWindow  implements Window{
	@Override
	public void show() {
		System.out.println("Show Linux's window!");
	}
}
public interface WidgetFactory {
	public Window createWindow();
}
public class WindowsWidgetFactory implements WidgetFactory{
	@Override
	public Window createWindow() {
		return new WindowsWindow();
	}
}
public class LinuxWidgetFactory  implements WidgetFactory{
	@Override
	public Window createWindow() {
		return new LinuxWindow();
	}
}
//test
public class TestMain {
	public static void Client(WidgetFactory facotry) {
		Window win = facotry.createWindow();
		win.show();
	}
	public static void main(String[] args) {
		String env = "windows";
		WidgetFactory facotry = null;
		
		if("windows".equals(env)){
			facotry= new WindowsWidgetFactory();
		} else {//linux
			facotry = new LinuxWidgetFactory();
		}
		Client(facotry);
	}
}

这种模式 可以分离具体的类,因为工厂负责创建产品对象,从而将客户与类的实现分离; 易于交换产品系列,因为应用中仅在初始化时才会创建具体的工厂并使用抽象工厂创建完整的产品系列,所以修改产品时只需修改具体的产品工厂实例即可; 易于保证产品的一致性,因为抽象工厂只会生产同一个产品系列而不会同时生产多种。这种模式的缺点在于拓展新产品系列时,需要构建与新产品系列结构完全相同的工厂集合。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值