设计模式分创建型模式,结构型模式,行为型模式。
创建型模式:顾名思义,就是在对象创建的时候所采用的模式。一般来说,初学者在需要创建一个object的时候总是使用new方法来实现对象创建,而在设计模式的创建模式这一系列模式中,所有的new动作都是隐式执行的,用户并看不到new动作的执行。
首先学习一下抽象工厂模式。
“四人帮”书中说,abstract factory模式的意图是:提供一个创建一系列相关或者相互依赖对象的接口,而无需指定它们具体的类。就我的理解,什么叫一系列接口呢,举个例子:开发一套GUI方面的控件,如:button,menu,table等等,然而为了同时能够使这套GUI在不同的os上执行,我们需要对任意一个控件写出两个不同的os版本。windows和unix。于是我们设计如下:
/**
* @author zhangke
*
*/
public interface AbstractFactory {
public Product createProduct();
}
public class Factory1 implements AbstractFactory {
public Factory1() {
}
/* (non-Javadoc)
* @see design.pattern.abstractfactory.AbstractFactory#createProduct()
*/
public Product createProduct() {
return new Product1();
}
}
public class Factory2 implements AbstractFactory {
public Factory2() {
// TODO Auto-generated constructor stub
}
/* (non-Javadoc)
* @see design.pattern.abstractfactory.AbstractFactory#createProduct()
*/
public Product createProduct() {
return new Product2();
}
}
public interface Product {
public void print();
}
public class Product1 implements Product {
public Product1() {
}
/* (non-Javadoc)
* @see design.pattern.abstractfactory.Product#print()
*/
public void print() {
System.out.println("product1");
}
}
public class Product2 implements Product {
public Product2() {
}
/* (non-Javadoc)
* @see design.pattern.abstractfactory.Product#print()
*/
public void print() {
System.out.println("product2");
}
}
客户端代码:
public class Client {
public Client() {
// TODO Auto-generated constructor stub
}
/**
* @param args
*/
public static void main(String[] args) {
AbstractFactory factory = new Factory1();
factory.createProduct().print();
}
}
如上面的代码所示,抽象工厂并不象简单工厂那样,负责不同类型对象的实例化,它将实例化过程放到子类中去实现,也就是在运行时指定,这样的结构带来的好处就是,未来有新的系列产品要加入的时候,只需要按照抽象工厂接口,将新产品实现工厂接口即可引入到程序中来。