簡單工廠模式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----艾斯奧特曼艾斯奧特曼有奧特曼打怪獸的功能,奧特曼有不少也都在總部。如今想總部要艾斯奧特曼讓他使用奧特曼共有功能打怪獸