浅谈工厂设计–java必备技能


说到工厂,我就联想到了亚洲的大工厂富士康–接过订单然后按照固定的模板生产商品,其实java中工厂类中的工厂方法也是一样,接过参数,根据参数来生产需要的商品;

今天我们一起来看看何为工厂设计模式,少罗嗦,直接看东西–
假如有客户委托工厂生产披萨,那么这个工厂要先获得客户想要的披萨的相关信息,有没有披萨需要特殊定制的;
根据客户需要先整出一个父类—以下代码仅供参考

package pissa.kind;

/**
 * @Auther: GavinLim
 * @Date: 2021/7/4 - 07 - 04 - 8:26
 * @Description: com.piissa.order
 * @version: 1.0
 */
public  class Pissa {
//封装--这是必须的
    private String name;//名称
   private double price;//价格
    private int size;//价格
//通用构造方法,子类也能能用到
    public Pissa(String name, double price, int size) {
        this.name = name;
        this.price = price;
        this.size = size;
    }
//gettersetter方法获得封装之后的信息
    public String getName() {
        return name;
    }

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

    public double getPrice() {
        return price;
    }

    public void setPrice(double price) {
        this.price = price;
    }

    public int getSize() {
        return size;
    }

    public void setSize(int size) {
        this.size = size;
    }
    //类似于产品展示方法--说明书
    public String showInfo() {
        return  "名称--" + name + "\n" +
                "价格--" + price +"\n" +
                "大小--" + size  ;
    }
}

在根据每个商品的独有的方面单独定制;

 public class BaconPissa extends Pissa {
    private int BaconKG;
    public BaconPissa(String name, double price, int size,int baconKG) {
        super(name, price, size);
this.BaconKG=baconKG;
    }

    public int getBaconKG() {
        return BaconKG;
    }

    public void setBaconKG(int baconKG) {
        BaconKG = baconKG;
    }

    @Override
    public String showInfo() {
        return super.showInfo()+"\n培根的克数是:"+BaconKG+"克";
    }
}


public class FruitPissa extends Pissa {
    String fruitKind;

    public FruitPissa(String name, double price, int size,String fruitKind) {
        super(name, price, size);
        this.fruitKind=fruitKind;
    }

    public String getFruitKind() {
        return fruitKind;
    }

    public void setFruitKind(String fruitKind) {
        this.fruitKind = fruitKind;
    }

    @Override
    public String showInfo() {
        return super.showInfo()+"\n你要加入的水果:"+fruitKind;
    }
}

定制生产模板完成之后,整个工厂类来接收客户定制的具体信息—

package com.piissa.order;

import pissa.kind.BaconPissa;
import pissa.kind.FruitPissa;
import pissa.kind.Pissa;

import java.util.Scanner;

/**
 * @Auther: GavinLim
 * @Date: 2021/7/4 - 07 - 04 - 8:41
 * @Description: com.piissa.order
 * @version: 1.0
 */
public  class GetPissaFactory {


        public static Pissa getPissa(int choice){
            Scanner sc = new Scanner(System.in);
            Pissa p = null;//先定义一个Pissa接收返回值
            switch (choice){
                case 1:
                {
                    System.out.println("请录入培根的克数:");
                    int BaconKG = sc.nextInt();
                    System.out.println("请录入匹萨的大小:");
                    int size = sc.nextInt();
                    System.out.println("请录入匹萨的价格:");
                    int price = sc.nextInt();
                    //将录入的信息封装为培根匹萨的对象:
                    BaconPissa baconP = new BaconPissa("培根匹萨",size,price,BaconKG);
                    p = baconP;
                }
                break;
                case 2:
                {
                    System.out.println("请输入想要加入的水果:");
                    String fruitKind = sc.next();
                    System.out.println("请输入匹萨的大小:");
                    int size = sc.nextInt();
                    System.out.println("请输入匹萨的零售价:");
                    int price = sc.nextInt();
                    //将录入的信息封装为水果匹萨的对象:
                    FruitPissa fruitP = new FruitPissa("水果匹萨",size,price,fruitKind);
                    p = fruitP;
                }
                break;
            }
            return p;
        }
    }

以上就定制完成,接下来在客户端呈现

package com.piissa.order;

import pissa.kind.Pissa;

import java.util.Scanner;

/**
 * @Auther: GavinLim
 * @Date: 2021/7/4 - 07 - 04 - 8:49
 * @Description: com.piissa.order
 * @version: 1.0
 */
public class PissaTest {
    public static void main(String[] args) {
        
        Scanner sc = new Scanner(System.in);
        System.out.println("请选择要购买的匹萨(1.培根匹萨 2.水果匹萨):");
        int choice = sc.nextInt();//选择
      //通过工厂类获取匹萨:
        Pissa pissa = GetPissaFactory.getPissa(choice);
        System.out.println(pissa.showInfo());
    }
}

在这里插入图片描述

简单来说就是
在制造之前要先准备具体的类信息,然后将我想要的产品(对象)传入到工厂类的工厂方法在中,然后工厂根据我提供的参数去生产我想要的产品;

共同学习共同进步;

Logo

技术共进,成长同行——讯飞AI开发者社区

更多推荐