本文目錄一覽:
java中的工廠模式是什麼意思?
工廠模式簡單的講就是用工廠方法代替了new的操作,
在通俗點就是說,你new一個對象的時候直接調用工廠方法就行了,
在編程時,需要定義一個工廠接口,由不同的的子類去實現,再定一個具體工廠類,定義一個產生實例的方法,我們通過這個方法來獲得實例就行了,
Java的工廠模式有哪一些,分別有什麼作用,一般用在哪些地方?
我簡單的說下,舉個例子,當我們的程序結構比較繁雜時,比如有100個類,而類中又有很多方法,這些方法之間都互相有依賴關係,也就是一個方法之間的某段邏輯處理需要用到另一個類中的代碼邏輯,這種時候對於整個程序而言是非常不利於開發的(我們需要考慮到很多類、方法之間的耦合問題),那麼就有一個概念了,也就是面對接口編程。通俗的說就是把類中的方法封裝起來,外部調用的人完全不需要考慮方法是如何實現的,但是這樣做也有一個不好的地方,我們的接口是不提供方法實現的,而需要在類中實現接口的方法。那麼問題產生了,我們在new接口對象的時候需要明確的知道他的實例類。
想象一下,如果程序在繼續龐大,接口非常多,接口實例類非常多,這樣又會產生我們之前的問題(我們需要考慮到很多類、方法之間的耦合問題)那麼這個時候就產生了一中設計思想,也就是工廠模式,這種模式的核心思想就是管理接口的實例對象,把接口和實例對象之間的關係封裝起來處理,外部需要用到某個接口的實例時,由工廠進行分配,而不需要關注具體是哪個實例。
如果你做到比較複雜的程序時你應該就能體會到了。
用java 編寫程序寫出簡單的工廠模式?
java中工廠模式分為:
簡單工廠模式(Simple Factory)
2. 工廠方法模式(Factory Method)
3. 抽象工廠模式(Abstract Factory)
每種方法的實現不同
提供一個簡單工廠模式的案例:
public abstract class Woman {
private String mySkill;
public String getMySkill() {
return mySkill;
}
public Woman() {
//System.out.println(“我是女人”);
}
public void setMySkill(String mySkill) {
this.mySkill = mySkill;
}
}
—————————-
public class LovelinessWoman extends Woman{
/*
* 可愛型女人
*/
public LovelinessWoman()
{
String mySkill=”撒過嬌、出過軌、勾引領導下過水”;
this.setMySkill(mySkill);
}
}
—————————–
public class SteelinessWoman extends Woman{
/*
* 冷酷型女人
*/
public SteelinessWoman()
{
String mySkill=”裝過神、弄過鬼,跟別人老公親過嘴”;
this.setMySkill(mySkill);
}
}
————————————–
public class WomanMakeFactory {
public Woman findWoman(int typeID) {
switch (typeID) {
case 1:
return new LovelinessWoman();
case 2:
return new VirtuousWoman();
case 3:
return new SteelinessWoman();
default:
return null;
}
}
public Woman findWoman(String type) throws ClassNotFoundException, InstantiationException, IllegalAccessException {
/*
* Type t = Type.GetType(“SimpleFactory.” + type);
* Woman wm =
* (Woman)Activator.CreateInstance(t); return wm;
*/
String string=”cn.jbit.design.simplefactory.”+type;
Class c = Class.forName(string);
Woman wm = (Woman) c.newInstance();
return wm;
}
}
————————-
調用
public class Test2 {
/**
* @param args
* @throws IllegalAccessException
* @throws InstantiationException
* @throws ClassNotFoundException
*/
public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException {
Scanner input=new Scanner(System.in);
boolean sel=false;
do {
System.out.println(“請選擇你要找的女人的類型”);
System.out.println(“LovelinessWoman:可愛型女人 VirtuousWoman:善良型女人 SteelinessWoman:冷酷型女人”);
String typeid=input.next();
WomanMakeFactory factory = new WomanMakeFactory();
Woman wm=factory.findWoman(typeid);
System.out.println(“該類型女人的新標準:”);
System.out.println(wm.getMySkill());
System.out.println(“還想看看別的類型嗎?y代表想,n代表再也不想了”);
sel=input.next().equals(“y”);
} while (sel);
}
}
原創文章,作者:ILCC,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/139115.html