Java大数据平台开发 学习笔记(33)—— java设计模式(工厂方法模式、抽象工厂模式)知识汇总

一、前言:

  1. 简单工厂模式:一个工厂类根据传入的参量决定创建出那一种产品类的实例。
    (注:简单工厂模式 不属于23种设计模式之一,目的只为与其下对比)
  2. 工厂方法模式:定义一个创建对象的接口,让子类决定实例化那个类。
  3. 抽象工厂模式:创建相关或依赖对象的家族,而无需明确指定具体类。

1.1、UML图:

在这里插入图片描述


二、简单工厂模式:

2.1、代码实例:

Step 1) 创建 Piizza 抽象类:

public abstract class Piizza {
    
    
    protected String name;

    public abstract void prepare();

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

    public void cut(){
    
    
        System.out.println(name + " cutting;");
    }

    public void box(){
    
    
        System.out.println(name + " boxing;");
    }

    public void setName(String name){
    
    
        this.name = name;
    }
}

Step 2) 创建 CheesePIzza 实现类:

public class CheesePIzza extends Piizza{
    
    
    @Override
    public void prepare() {
    
    
        System.out.println("给制作奶酪披萨原材料");
    }
}

Step 3) 创建 GreekPozza 实现类:

public class GreekPozza extends Piizza{
    
    
    @Override
    public void prepare() {
    
    
        System.out.println("给希腊披萨准备原材料");
    }
}

Step 4) 创建 OrderPizza 类:

public class OrderPizza {
    
    

    String orderType = "";
    SimpFectory simpFectory;
    Piizza piizza = null;

    public OrderPizza(SimpFectory simpFectory){
    
    
        setSimpFectory(simpFectory);
    }

    public void setSimpFectory(SimpFectory simpFectory){
    
    
        this.simpFectory = simpFectory;
        do{
    
    
            orderType = gettype();
            piizza = this.simpFectory.createPizza(orderType);
            if(piizza != null){
    
    
                piizza.prepare();
                piizza.bake();
                piizza.cut();
                piizza.box();
            }else {
    
    
                System.out.println("订购 披萨 失败");
                break;
            }
        }while (true);

    }

    private String gettype(){
    
    
        try{
    
    
            BufferedReader strin = new BufferedReader(new InputStreamReader(System.in));
            System.out.println("input pizza type : ");
            String str = strin.readLine();
            return str;
        }catch (IOException e){
    
    
            e.printStackTrace();
            return "";
        }
    }
}

Step 5) 创建 SimpFectory 类:

public class SimpFectory {
    
    
    public Piizza createPizza(String orderTyoe){
    
    
        Piizza pizza = null;
        System.out.println("使用简单工厂模式");
        if(orderTyoe.equals("greek")){
    
    
            pizza = new GreekPozza();
            pizza.setName("希腊披萨");
        }else if(orderTyoe.equals("cheese")){
    
    
            pizza = new CheesePIzza();
            pizza.setName("奶酪披萨");
        }else if(orderTyoe.equals("prpper")){
    
    
            pizza = new CheesePIzza();
            pizza.setName("胡椒披萨");
        }
        return pizza;
    }
}

Step 6) 创建 mian 方法:

public class PizzaStore {
    
    
    public static void main(String[] args) {
    
    
        new OrderPizza(new SimpFectory());
        System.out.println("--退出程序--");
    }
}


三、工厂方法模式:

3.1、代码实例:

Step 1) 创建 Piizza 抽象类:

public abstract class Piizza {
    
    
    protected String name;

    public abstract void prepare();

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

    public void cut(){
    
    
        System.out.println(name + " cutting;");
    }

    public void box(){
    
    
        System.out.println(name + " boxing;");
    }

    public void setName(String name){
    
    
        this.name = name;
    }
}

Step 2) 创建 BJChessePizza 实现类:

public class BJChessePizza extends Piizza{
    
    
    @Override
    public void prepare() {
    
    
        setName("北京奶酪披萨");
        System.out.println("北京奶酪披萨");
    }
}

Step 3) 创建 BJGreekPizza 实现类:

public class BJGreekPizza extends Piizza{
    
    
    @Override
    public void prepare() {
    
    
        setName("北京胡椒披萨");
        System.out.println("北京胡椒披萨");
    }
}

Step 4) 创建 LDChessPizza 实现类:

public class LDChessPizza extends Piizza{
    
    
    @Override
    public void prepare() {
    
    
        setName("伦敦奶酪披萨");
        System.out.println("伦敦奶酪披萨");
    }
}

Step 5) 创建 LDGreekPizza 实现类:

public class LDGreekPizza extends Piizza{
    
    
    @Override
    public void prepare() {
    
    
        setName("伦敦奶酪披萨");
        System.out.println("伦敦奶酪披萨");
    }
}

Step 6) 创建 OrderPizza 抽象类:

public abstract class OrderPizza {
    
    

    abstract Piizza createPizza(String orderType);

    public OrderPizza() {
    
    
        Piizza piizza = null;
        String orderType;
        do{
    
    
            orderType = gettype();
            piizza = createPizza(orderType);
            if(piizza != null){
    
    
                piizza.prepare();
                piizza.bake();
                piizza.cut();
                piizza.box();
            }else {
    
    
                System.out.println("订购 披萨 失败");
                break;
            }
        }while (true);
    }

    private String gettype(){
    
    
        try{
    
    
            BufferedReader strin = new BufferedReader(new InputStreamReader(System.in));
            System.out.println("input pizza type : ");
            String str = strin.readLine();
            return str;
        }catch (IOException e){
    
    
            e.printStackTrace();
            return "";
        }
    }
}

Step 7) 创建 BJoderPizza 实现类:

public class BJoderPizza extends OrderPizza{
    
    
    @Override
    Piizza createPizza(String orderType) {
    
    
        Piizza piizza = null;
        if(orderType.equals("cheese")){
    
    
            piizza = new BJChessePizza();
        }else if (orderType.equals("greek")){
    
    
            piizza = new BJGreekPizza();
        }else {
    
    
            piizza = null;
        }
        return piizza;
    }
}

Step 8) 创建 LDoderPizza 实现类:

public class LDoderPizza extends OrderPizza{
    
    
    @Override
    Piizza createPizza(String orderType) {
    
    
        Piizza piizza = null;
        if(orderType.equals("cheese")){
    
    
            piizza = new LDChessPizza();
        }else if (orderType.equals("greek")){
    
    
            piizza = new LDGreekPizza();
        }
        return piizza;
    }
}

Step 6) 创建 mian 方法:

public class PizzaStore {
    
    
    public static void main(String[] args) {
    
    
//        new BJoderPizza();
//        System.out.println("--退出程序--");

        new LDoderPizza();
        System.out.println("--退出程序--");
    }
}


四、抽象工厂模式:

4.1、代码实例:

Step 1) 创建 Piizza 抽象类:

public abstract class Piizza {
    
    
    protected String name;

    public abstract void prepare();

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

    public void cut(){
    
    
        System.out.println(name + " cutting;");
    }

    public void box(){
    
    
        System.out.println(name + " boxing;");
    }

    public void setName(String name){
    
    
        this.name = name;
    }
}

Step 2) 创建 BJChessePizza 实现类:

public class BJChessePizza extends Piizza{
    
    
    @Override
    public void prepare() {
    
    
        setName("北京奶酪披萨");
        System.out.println("北京奶酪披萨");
    }
}

Step 3) 创建 BJGreekPizza 实现类:

public class BJGreekPizza extends Piizza{
    
    
    @Override
    public void prepare() {
    
    
        setName("北京胡椒披萨");
        System.out.println("北京胡椒披萨");
    }
}

Step 4) 创建 LDChessPizza 实现类:

public class LDChessPizza extends Piizza{
    
    
    @Override
    public void prepare() {
    
    
        setName("伦敦奶酪披萨");
        System.out.println("伦敦奶酪披萨");
    }
}

Step 5) 创建 LDGreekPizza 实现类:

public class LDGreekPizza extends Piizza{
    
    
    @Override
    public void prepare() {
    
    
        setName("伦敦奶酪披萨");
        System.out.println("伦敦奶酪披萨");
    }
}

Step 6) 创建 AbsFactory 接口:

public interface AbsFactory {
    
    
    public Piizza createPizza(String orderType);
}

Step 7) 创建 BJoderPizza 实现接口:

public class BJoderPizza implements AbsFactory {
    
    

    @Override
    public Piizza createPizza(String orderType) {
    
    
        Piizza piizza = null;
        if(orderType.equals("cheese")){
    
    
            piizza = new BJChessePizza();
        }else if (orderType.equals("greek")){
    
    
            piizza = new BJGreekPizza();
        }else {
    
    
            piizza = null;
        }
        return piizza;
    }
}

Step 8) 创建 LDoderPizza 实现接口:

public class LDoderPizza implements AbsFactory {
    
    
    @Override
    public Piizza createPizza(String orderType) {
    
    
        Piizza piizza = null;
        if(orderType.equals("cheese")){
    
    
            piizza = new LDChessPizza();
        }else if (orderType.equals("greek")){
    
    
            piizza = new LDGreekPizza();
        }
        return piizza;
    }
}

Step 9) 创建 OrderPizza 类:

public class OrderPizza {
    
    

    AbsFactory factory;

    public OrderPizza(AbsFactory factory) {
    
    
        serFactory(factory);
    }

    private void serFactory(AbsFactory factory){
    
    
        Piizza piizza = null;
        String orderType = "";
        this.factory = factory;
        do{
    
    
            orderType = gettype();
            piizza = factory.createPizza(orderType);
            if(piizza != null){
    
    
                piizza.prepare();
                piizza.bake();
                piizza.cut();
                piizza.box();
            }else {
    
    
                System.out.println("订购 披萨 失败");
                break;
            }
        }while (true);
    }

    private String gettype(){
    
    
        try{
    
    
            BufferedReader strin = new BufferedReader(new InputStreamReader(System.in));
            System.out.println("input pizza type : ");
            String str = strin.readLine();
            return str;
        }catch (IOException e){
    
    
            e.printStackTrace();
            return "";
        }
    }
}

Step 10) 创建 mian 方法:

public class PizzaStore {
    
    
    public static void main(String[] args) {
    
    
//        new OrderPizza(new BJoderPizza());
//        System.out.println("--退出程序--");

        new OrderPizza(new LDoderPizza());
        System.out.println("--退出程序--");
    }
}


• 由 ChiKong_Tam 写于 2020 年 10 月 17 日

猜你喜欢

转载自blog.csdn.net/qq_42209354/article/details/109129613