抽象工厂模式2010-02-06 BlogJava Winty[环境]:StarUML5.0 + JDK6

/**
 * 抽象工厂:Button and Text of Windows and Unix 
 * @version 2009-4-11
 * @author Winty(wintys@gmail.com)
 */
package pattern.abstractfactory;
public class AbstractFactory{
    public static void main(String[] args){
        Factory unix , win;
        unix = new UnixFactory();
        win = new WindowsFactory();
        //创建Unix产品
        Button btn1 = unix.createButton();
        Text text1 = unix.createText();
        System.out.println("");
        //创建Windows产品
        Button btn2 = win.createButton();
        Text text2 = win.createText();
    }
}
//产品等级1
abstract class Button{
    protected String type;
    public Button(){
         type = "Button";
    }
}
class UnixButton extends Button{
    public UnixButton(){
        System.out.println("Unix" + type);
    }
}
class WindowsButton extends Button{
    public WindowsButton(){
        System.out.println("Windows" + type);
    }
}
//产品等级2
abstract class Text{
    protected String type; 
    
    public Text(){
        type = "Text";
    }
}
class UnixText extends Text{
    public UnixText(){
        System.out.println("Unix"+type);
    }
}
class WindowsText extends Text{
    public WindowsText(){
        System.out.println("Windows"+type);
    }
}
//抽象工厂
abstract class Factory{
    public abstract Button createButton();
    public abstract Text createText();
}
class UnixFactory extends Factory{
    public Button createButton(){
        return new UnixButton();
    }
    public Text createText(){
        return new UnixText();
    }
}
class WindowsFactory extends Factory{
    public Button createButton(){
        return new WindowsButton();
    }
    public Text createText(){
        return new WindowsText();
    }
}