java中工廠模式分為:
成都創(chuàng)新互聯(lián)公司-專業(yè)網站定制、快速模板網站建設、高性價比瀘溪網站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式瀘溪網站制作公司更省心,省錢,快速模板網站建設找我們,業(yè)務覆蓋瀘溪地區(qū)。費用合理售后完善,10多年實體公司更值得信賴。
簡單工廠模式(Simple Factory)?
2. 工廠方法模式(Factory Method)?
3. 抽象工廠模式(Abstract Factory)
每種方法的實現(xiàn)不同
提供一個簡單工廠模式的案例:
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);
}
}
這個應該比較簡單一點。
某系統(tǒng)日志記錄器要求支持多種日志記錄方式,如文件記錄、數(shù)據(jù)庫記錄等,且用戶可以根據(jù)要求動態(tài)選擇日志記錄方式。現(xiàn)使用工廠方法模式設計該系統(tǒng),并寫出相應Java代碼。
interface Log{
public void writeLog();
}
class FileLog implements Log{
public void writeLog(){
System.out.println("文件記錄");
}
}
class DatabaseLog implements Log{
public void writeLog(){
System.out.println("數(shù)據(jù)庫記錄");
}
}
interface LogFactory{
public Log createLog();
}
class FileLogFactory implements LogFactory{
public Log createLog(){
return new FileLog();
}
}
class DatabaseLogFactory implements LogFactory{
public Log createLog(){
return new DatabaseLog();
}
}
public class Client{
public static void main(String[] args) {
try{
Log log;
LogFactory factory;
//這里可以改成使用DOM和Java反射機制讀取XML文件,獲取工廠類名
factory=new DatabaseLogFactory ();
log=factory.createLog();
log.writeLog();
}
catch(Exception e){
System.out.println(e.getMessage());
}
}
}
factory模式不需要建立什么包,完全得靠你對factory模式的理解,工廠模式基本上應該是體現(xiàn)了一個多態(tài)的概念,用戶只關心結果,而不需要關心其具體過程...
工廠模式有三個參與者,抽象產品(Product)、工廠(Creator)和具體產品(ConcreteProduct)??蛻糁粫吹焦S和抽象產品。
public interface Product{
public String getName();
}
public class ConcreteProduct implements Product{
public String getName(){
return "產品1";
}
}
public class Creator{
public static Product create1(){
return new ConcreteProduct();
}
}
工廠模式的作用在于將創(chuàng)建具體產品的方法由工廠類控制,客戶只需要知道產品的抽象類型