设计模式---工厂方法

工厂方式是模板方法的一个特例

工厂方法使用继承:把对象的创建委托给子类,子类实现工厂方法来创建对象。

工厂方法让类的实例化推迟到子类

// Creator是一个类,它实现了所有操纵产品的方法,但不实现工厂方法
public abstract class Creator{
    void anOperation(){
        // ...
    }
    // Creator的所有子类都必须实现这个抽象的factoryMethod()方法
    abstract void factoryMethod();
}
 
// 具体的创建者
public class ConcreteCreator extends Creator{
    // ConcreteCreator实现了factoryMethod(),以实际制造出产品。
    @Override
    void factoryMethod() {
        // ...
    }
}
 
// 所有产品必须实现这个接口,这样一来,
// 使用这些产品的类就可以引用这个接口,而不是具体的类
public abstract class Product{
    void operation(){
        // ...
    }
}
 
// 具体的产品
public class ConcreteProduct extends Product{
}
public abstract class PizzaStore {
    
    public Pizza orderPizza(String type) {
        Pizza pizza;
        pizza = createPizza(type);//根据参数的类型制作不同类型的披萨
        pizza.prepare();
        pizza.bake();
        pizza.cut();
        pizza.box();
        return pizza;

    }

    protectd abstract Pizza createPizza(String type);
//工厂方法用来处理对象的创建,并将这样的行为封装在子类中,这样超类的代码和子类对象创建代码解耦了
}
public class NYPizzaStore extends PizzaStore {
    Pizza createPizza(String type) {
           if (type.equals("cheese")) {
                return new ClassA();
            } 
            //、、、、、
       }
}

依赖倒置原则:要依赖抽象,不要依赖具体类。

遵循依赖倒置原则的指导方针:

1、变量不可以持有具体类的引用
如果使用new,就会持有具体类的引用。你可以改用工厂来避开这样的做法。

2、不要让类派生自具体类
如果派生自具体类,你就会依赖具体类。请派生自一个抽象(接口或抽象类)。

3、不要覆盖基类中已实现的方法
如果覆盖基类已实现的方法,那么你的基类就不是一个真正适合被继承的抽象。基类中已实现的方法,应该由所有的子类共享。

参考:

《head first 设计模式》

http://www.importnew.com/23499.html

猜你喜欢

转载自blog.csdn.net/l1394049664/article/details/81568029