首页 > 其他 > 详细

工厂方法笔记

时间:2020-03-07 19:39:34      阅读:65      评论:0      收藏:0      [点我收藏+]

定义

技术分享图片

结构

技术分享图片

例子

现在有一个披萨店对象,有三种披萨对象:PizzaA PizzaB PizzaC,都是Pizza 的子类. 披萨店有点餐方法.

public class Pizza {
    void prepare(){
        System.out.println("preparing...");
    }

    void bake(){        
        System.out.println("baking...");
    }

    void cut(){
        System.out.println("cutting...");

    }

    void box(){
        System.out.println("boxing...");

    }
}
public class PizzaA extends Pizza {
    String name="A";
}

public class PizzaB extends Pizza{
    String name="B";

}

public class PizzaC extends Pizza{
    String name="C";
}
public class PizzaStore {
    public static void main(String[] args) {
        PizzaStore store = new PizzaStore();
        Pizza pizza = store.orderPizza("A");
    }
    //点一个Pizza
    public Pizza orderPizza(String type){
        Pizza pizza = null;
        if(type.equals("A"))
            pizza = new PizzaA();
        else if(type.equals("B"))
            pizza = new PizzaB();
        else if(type.equals("C"))
            pizza = new PizzaC();


        pizza.prepare();
        pizza.bake();
        pizza.cut();
        pizza.box();
        return null;
    }
}

技术分享图片
Pizza类和PizzaStore现在是紧耦合,试着将 new对象语句抽出到一个方法里,就是简单工厂方法.

package FactoryMethod;

public class PizzaStore {
    public static void main(String[] args) {
        PizzaStore store = new PizzaStore();
        Pizza pizza = store.orderPizza("A");
    }
    public Pizza simpleFactory(String type){
        Pizza pizza = null;
        if(type.equals("A"))
            pizza = new PizzaA();
        else if(type.equals("B"))
            pizza = new PizzaB();
        else if(type.equals("C"))
            pizza = new PizzaC();
        return pizza;
    }
    //点一个Pizza
    public Pizza orderPizza(String type){
        Pizza pizza =simpleFactory(type);

        System.out.println(type);

        pizza.prepare();
        pizza.bake();
        pizza.cut();
        pizza.box();
        return null;
    }
}

但方法现在仍然在这个类中,还是存在耦合,创建接口,实现工厂方法.
new 对象产生的耦合被消除了.

public class PizzaFactory extends  FactoryMethod {
    Object factoryMethod(String type) {
        Pizza pizza = null;
        if (type.equals("A"))
            pizza = new PizzaA();
        else if (type.equals("B"))
            pizza = new PizzaB();
        else if (type.equals("C"))
            pizza = new PizzaC();
        return pizza;
    }
}

public class PizzaStore {
    FactoryMethod factory;
    public static void main(String[] args) {
        PizzaStore store = new PizzaStore();
        Pizza pizza = store.orderPizza("A");
    }

    public PizzaStore(FactoryMethod factory){
        this.factory=factory;
    }
  
    //点一个Pizza
    public Pizza orderPizza(String type){
        Pizza pizza =(Pizza)factory.factoryMethod(type);

        System.out.println(type);

        pizza.prepare();
        pizza.bake();
        pizza.cut();
        pizza.box();
        return null;
    }
}

工厂方法笔记

原文:https://www.cnblogs.com/l1057618497/p/12435788.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!