簡單工廠模式

簡單工廠模式ide

工廠模式中包含三個角色函數

工廠
當用戶須要一個A產品的時候,報給工廠。工廠便把A產品給於用戶。工具

抽象產品
抽象對象就是至關於一個奧特曼模型,可是奧特曼有不少,艾斯,賽文都是奧特曼。可是把這些奧特曼整合起來就是一「奧特曼」
這一共有的名稱,或者說具備這個能力的都是「奧特曼」this

具體產品
上面說到奧特曼是一個抽象出來的「產品」。那麼艾斯奧特曼就是具體到惟一。當打怪獸的時候,須要艾斯的時候。就要向總部(工程)
發送帶艾斯的信息。總部就會讓艾斯出來打怪獸對象

下面使用代碼來講明(抽象產品爲收銀機收費;具體產品爲正常收費 打折收費 滿300反50)繼承

抽象產品類:收費共有兩個功能 收錢和找錢
public abstract class AbstractCashSuper {

   /**
    * 所收到的錢
    */
   public double number;

   public double getNumber() {
       return number;
  }

   public void setNumber(double number) {
       this.number = number;
  }

   public abstract double acceptCash();
}
具體產品(打折) 打折類繼承了收銀機類 一樣具備收錢和找錢的功能
public class Discount extends AbstractCashSuper {

   public double discount;
   private double money;
   public Discount(double discount) {
       this.discount = discount;
  }

   @Override
   public double acceptCash() {
       money = getNumber();
       money = discount * money ;
       return money;
  }
}
-----其餘兩個類就略get

爲了和工廠作一個對比,寫一個工具類 在使用不一樣的功能的時候 只須要傳入使用的名再在switch中就能夠拿到這個對象
public class CashSuperUtiles {

   public static AbstractCashSuper oper(String str){
       AbstractCashSuper abstractCashSuper = null;

       switch (str){
           case "原價":
               abstractCashSuper = new Same();
               break;

           case "打八折":
               abstractCashSuper = new Discount(0.8);
               break;

           case "滿300返50":
               abstractCashSuper = new Rebate(300,50);
               break;
      }

       return abstractCashSuper;
  }

}產品

在main函數中
AbstractCashSuper 打八折 = CashSuperUtiles.oper("打八折");
打八折.setNumber(456);
double number = 打八折.acceptCash();
System.out.println(number+"");
經過傳入所對應的名稱拿到對象,而這對象的功能是是子類繼承了父類所共有的
這樣便能使用功能的功能。無論是什麼獨有的功能,但咱們只須要共有的功能就能夠it

若是說咱們只須要共有的功能,那麼能夠製造一個盒子。把所須要的產品丟入這個盒子裏,而盒子拿到具體的產品以後就能
有它的獨有功能,而外部看到的確實共有功能
public class ContentSuperUtils {
   AbstractCashSuper abstractCashSuper = null;
   public ContentSuperUtils(AbstractCashSuper abstractCashSuper){
       this.abstractCashSuper = abstractCashSuper;
  }

   public void setMengey(double number){
       abstractCashSuper.setNumber(number);
  }

   public double getMengey(){

       return abstractCashSuper.acceptCash();
  }
}class

main方法ContentSuperUtils abstractCashSuper = new ContentSuperUtils(new Discount(0.8));abstractCashSuper.setMengey(456);double mengey = abstractCashSuper.getMengey();System.out.println(mengey+"");再用奧特曼的例子來講的話ContentSuperUtils-----總部AbstractCashSuper-----奧特曼Discount----艾斯奧特曼艾斯奧特曼有奧特曼打怪獸的功能,奧特曼有不少也都在總部。如今想總部要艾斯奧特曼讓他使用奧特曼共有功能打怪獸

相關文章
相關標籤/搜索