抽象工厂设计模式

这个设计模式又将方法工厂设计模式更为抽象了一层 

我们的方法工厂设计模式只能生产 Coder  ,这一点就是 方法工厂设计模式和抽象工厂设计模式最大的不同,其他的很类似

首先 我们需要搞清楚 两个 概念 产品簇和等级结构

比如我们不仅仅是要码农,我们还要设计师,我们需要IOS 的Coder 和Designer   和 JAVA 的Coder 和Designer   

这样就分为了两个产品簇 。一个跟JAVA相关的产品簇 ,一个跟IOS相关的产品簇。 而 设计师和码农就是两个不同的等级,不同的等级由不同的抽象产品类管理 如Coder 和 Designer

我们分别由一个具体工厂JAVAEmployeeFactory 和 IOSEmployeeFactory 来管理一个产品簇,工厂拥有生成Coder和 Designer的方法。

将工厂抽象出来,Factory 抽象工厂所具有的方法就有两个:生产Coder 和生成Designer

和工厂方法相同的是 还有由 抽象工厂 具体工厂 抽象产品 具体产品构成 不过就是在工厂上分了类,分了簇的概念。



上代码:

package abstractfactory;
/*
 * 抽象工厂  可以被继承为各类工程
 */
public interface Fatory {
	public Coder buildCoder(String level);
	public Designer buildDesigner(String levle);
}


package abstractfactory;

public class IOSEmployeeFactory implements Fatory {

	@Override
	public Coder buildCoder(String level) {
		return new IOScoder( level);
	}
	@Override
	public Designer buildDesigner(String level) {
		return new IOSDesigner( level);
	}	
}


package abstractfactory;

public class JAVAEmployeeFactory implements Fatory {

	@Override
	public Coder buildCoder(String level) {
		return new JavaCoder(level);
	}
	@Override
	public Designer buildDesigner(String level) {
		return new JavaDesigner(level);
	}	
}

package abstractfactory;

public interface Coder {
	//程序员敲代码的抽象方法
	
	public void Code();
		
}

package abstractfactory;
/**
 * IOS开发程序员
 * @author coffee
 *
 */
public class IOScoder implements Coder {
	//具体的实现方法
	String level;
	public IOScoder(String level) {
		this.level = level;
	}
	@Override
	public void Code() {
		System.out.println(level+"写代码,开发IOS项目");
	}
	
}


package abstractfactory;
/**
 * java程序员
 * @author coffee
 *
 */
public class JavaCoder implements Coder {
	String level;
	public JavaCoder(String level) {
		this.level =level;
	}
	//具体的实现方法
	@Override
	public void Code() {
		System.out.println(level+"写代码,开发Java项目");
	}
	
}

package abstractfactory;

public interface Designer {
	//设计师设计的抽象方法
	public void Design();
		
}

package abstractfactory;
/**
 * IOS开发程序员
 * @author coffee
 *
 */
public class IOSDesigner implements Designer {
	String level;
	public IOSDesigner(String level) {
		this.level =level;
	}
	@Override
	public void Design() {
		System.out.println(level+"设计IOS项目");
	}
	
}

package abstractfactory;
/**
 * java程序员
 * @author coffee
 *
 */
public class JavaDesigner implements Designer {
	String level;
	public JavaDesigner(String level) {
		this.level=level;
	}
	//具体的实现方法
	@Override
	public void Design() {
		System.out.println(level+"设计Java项目");
	}
	
}

package abstractfactory;

public class Test {
	public static void main(String[] args) {		
	Fatory fatory= new IOSEmployeeFactory();
	Coder coder = fatory.buildCoder("中级程序员");
	coder.Code();
	}
}

测试用例中发现 我们不必要关心具体的实现子类,只需要关心什么工厂。

这样的设计 可以面对多产品的需求了。 工厂抽象, 产品抽象。



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值