设计模式学习笔记(4)-工厂模式

工厂模式主要是避免new所带来的依赖,这样可以在应用直接替换对象而不用修改。

实现要点:

1.创建一个Product的类或者接口,Product的子类实现这个接口(或继承这个类);

2.创建一个Factory的类或者接口,Factory的子类实现这个接口(或继承这个类),实现建造对象的方法。

public interface Shape {
    void draw();
}
public class Circle implements Shape {

    @Override
    public void draw() {
        System.out.println("draw circle");
        
    }
}
public class Square implements Shape{

    public void draw() {
        System.out.println("draw square");
    }
}
public interface ShapeFactory {
    public Shape make(String shapeName) throws Exception;

}
public class ShapeFactoryImpl implements ShapeFactory{

    @Override
    public Shape make(String shapeName) throws Exception {
        if (shapeName.equals("Circle")) {
            return new Circle();
        } else if (shapeName.equals("Square")) {
            return new Square();
        } else {
            throw new Exception("Shape Factory can't create " + shapeName);
        }
    }
}

public class Test {

    /**
     * @param args
     */
    public static void main(String[] args) {
        ShapeFactory shapeFactory = new ShapeFactoryImpl();
        Shape circleShape;
        try {
            circleShape = shapeFactory.make("Circle");
            circleShape.draw();
        } catch (Exception e) {
            e.printStackTrace();
        }
        
        Shape squareShape;
        try {
            squareShape = shapeFactory.make("Square");
            squareShape.draw();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

Java 类库中的使用范例:

java.util.Calendar – getInstance()
java.util.Calendar – getInstance(TimeZone zone)
java.util.Calendar – getInstance(Locale aLocale)
java.util.Calendar – getInstance(TimeZone zone, Locale aLocale)

java.text.NumberFormat – getInstance()
java.text.NumberFormat – getInstance(Locale inLocale)

 

 

 

posted @ 2013-12-15 19:35  adgkns  阅读(130)  评论(0编辑  收藏  举报