常见设计模式之Abstract Factory篇

Abstract工厂模式在日常工作中比较常见,往往使用该模式的目的是为了简化客户端的应用。对于一系列的子类,客户端不必要分别创建每个子类,而是直接处理超类(该超类一般为借口或者抽象类)。而实例化具体的类则推迟到子类工厂中进行,从而当子类改变时,客户端并不知道,因为它 是对超类进行处理的。

    具体使用场合,Design Pattern总结如下:

1. 系统应该对相应子类的构建、组合和代表的含义独立

2. 系统应该在多个产品组合中配置其中一个

3.相关产品应该组合在一起使用

4.提供产品库类的集合时,你需要展示接口而不是实现时。


需要注意的是,Factory往往设计为单例模式。

具体实例:

该类中,Abstract Factory有两个具体的工厂实现:MaleCreate,和FemaleCreate

Human 的两个子类FemaleHuman, MaleHuman,

Animal的两个子类FemalAnimal, MaleAnimal

其中,MaleCreate产生Human的MaleHuman, Animal的MaleHuman子类

FemalCreate产生Human的FemalHuman, Animal 的FemalHuman子类

package net.liuyx.test;

public interface AbstractLivingFactory {
	public Human createHuman();
	public Animal createAnimal();
	public static class Test{
		public static void main(String[] args){
			AbstractLivingFactory alf =  new MaleCreate();
			Human h = alf.createHuman();
			Animal a = alf.createAnimal();
			System.out.println(h + "<<<<<< " + a);
			System.out.println("=============");
			AbstractLivingFactory alf = new FemalCreate();
			Human h1 = alf.createHuman();
			Animal a1 = alf.createAnimal();
			System.out.println(h1 + ">>>>>> " + a1);
		}
	}
}
class MaleCreate implements AbstractLivingFactory{
	public Human createHuman(){
		return new Human.MaleHuman();
	}
	public Animal createAnimal(){
		return new Animal.MaleAnimal();
	}
}
class FemalCreate implements AbstractLivingFactory{
	public Human createHuman(){
		return new Human.FemalHuman();
	}
	public Animal createAnimal(){
		return new Animal.FemalAnimal();
	}
}
abstract class Human{
	static class FemalHuman extends Human{

		@Override
		public String toString() {
			return "FemalHuman ";
		}
	}
	static class MaleHuman extends Human{

		@Override
		public String toString() {
			return "MaleHuman ";
		}
	}
}
abstract class Animal{
	static class FemalAnimal extends Animal{

		@Override
		public String toString() {
			return "FemalAnimal";
		}
	}
	static class MaleAnimal extends Animal{

		@Override
		public String toString() {
			return "MaleAnimal";
		}
	}
}

输出结果为:

MaleHuman <<<<<< MaleAnimal
=============
FemalHuman >>>>>> FemalAnimal


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值