本帖最后由 姚鑫 于 2012-3-2 03:02 编辑
根据楼上同学举的例子,我用代码实现了下抽象工厂设计模式(为了便于理解,使用汉字做了变量名),代码如下:
public interface CPU {
void cpu工作();
}
public interface 主板 {
void 主板工作();
}
public interface 抽象工厂 {
CPU 生产CPU();
主板 生产主板();
}
public class AMD_CPU implements CPU{
public void cpu工作() {
System.out.println("AMD的CPU工作了");
}
}
public class AMD_主板 implements 主板{
public void 主板工作() {
System.out.println("AMD的主板工作了");
}
}
public class Intel_CPU implements CPU{
public void cpu工作() {
System.out.println("Intel的CPU工作了");
}
}
public class Intel_主板 implements 主板{
public void 主板工作() {
System.out.println("Intel的主板工作了");
}
}
public class AMD implements 抽象工厂{
public CPU 生产CPU() {
return new AMD_CPU();
}
public 主板 生产主板() {
return new AMD_主板();
}
}
public class Intel implements 抽象工厂{
public CPU 生产CPU() {
return new Intel_CPU();
}
public 主板 生产主板() {
return new Intel_主板();
}
}
public class 电脑 {
//static 抽象工厂 factory = new AMD(); //只改动一条代码,即可实现电脑配置的变化,其实是利用了多态,这是抽象工厂设计模式的精妙之处
static 抽象工厂 factory = new Intel();
static CPU MyCPU = factory.生产CPU();
static 主板 my主板 = factory.生产主板();
public static void main(String[] args) {
MyCPU.cpu工作();
my主板.主板工作();
}
}
运行结果如下:
Intel的CPU工作了
Intel的主板工作了
*******************************************************************************************************************************************
抽象工厂设计模式的定义:提供一个系列相关或相互依赖对象的接口,而无需制定它们具体的类。《引自大话设计模式》
抽象工厂:AMD工厂和Intel工厂可以决定其产品CPU、主板的不同,那么用什么来决定工厂的不同呢?答案是抽象工厂。就如示例代码中的那个 抽象工厂interface。
抽象工厂设计模式的好处:电脑这个类相当于我们交给用户的产品,某一天客户要求你把电脑的AMD平台改成Intel平台,如果不用抽象工厂设计模式,那么大部分代码需要改动,这是程序员很苦恼的事,但是聪明的程序员留了后手,那就是抽象工厂设计模式,只需该一条代码,就实现了产品本质的变化,你说牛不牛。原理就是用接口操纵实例,类名也被具体工厂分离,不会出现在客户代码中。
抽象工厂在数据访问上的应用:假如一个项目用SQLSERVER设计,如果老板让你改为Access,那么改代码是非常痛苦的,也会出现很多错误,使用抽象工厂设计模式,可以实现不改变客户代码的情况下实现数据库的快速移植。
|