日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

java抽象工厂设计模式_23种经典设计模式的java实现_1_抽象工厂模式

發(fā)布時間:2024/1/23 asp.net 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java抽象工厂设计模式_23种经典设计模式的java实现_1_抽象工厂模式 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

抽象工廠模式的適用:

一個系統(tǒng)要獨(dú)立于它的產(chǎn)品的創(chuàng)建、組合和表示時。

一個系統(tǒng)要由多個產(chǎn)品系列中的一個來配置時。

當(dāng)你要強(qiáng)調(diào)一系列相關(guān)的產(chǎn)品對象的設(shè)計以便進(jìn)行聯(lián)合使用時。

當(dāng)你提供一個產(chǎn)品類庫,而只想顯示它們的接口而不是實(shí)現(xiàn)時。

示例說明:

有三種抽象的產(chǎn)品:墻、門、房間。

對這三種抽象產(chǎn)品有兩組具體實(shí)現(xiàn):臥室和起居室。

那么,我們的抽象工廠就可以根據(jù)客戶的指令(即調(diào)用參數(shù))去生產(chǎn)臥室和起居室的房間(墻和門包括在房間里)。

測試啟動類:

package com.alex.designpattern.abstractfactory;

/** *//**

* 抽象工廠模式

*

* 提供一個創(chuàng)建一系列相關(guān)或相互依賴對象的接口,而無需指定它們具體的類。

*

* @author huqi

* @serialData 2007

*/

public class Test ...{

public static void main(String[] args) throws Exception ...{

// ----- Create Living Room

Room myLivingRoom = AbstractRoomFactory.createRoom("LivingRoom");

AbstractRoomFactory.showRoom(myLivingRoom);

// ----- Create Bed Room

Room myBedRoom = AbstractRoomFactory.createRoom("BedRoom");

AbstractRoomFactory.showRoom(myBedRoom);

}

}

抽象產(chǎn)品:

package com.alex.designpattern.abstractfactory;

/** *//**

* The Abstract Class of Wall

*/

public interface Wall ...{

public String getName();

}

package com.alex.designpattern.abstractfactory;

/** *//**

* The Abstract Class of Door

*/

public interface Door ...{

public String getName();

}

package com.alex.designpattern.abstractfactory;

/** *//**

* The Abstract Class of Room

*/

public interface Room ...{

public Wall getWall();

public Door getDoor();

}

實(shí)際產(chǎn)品_1

package com.alex.designpattern.abstractfactory;

/** *//**

* A concrete Room - Bed Room

*/

public class BedRoom implements Room ...{

public BedRoom() ...{

System.out.println("Initiated a bedroom.");

}

public Door getDoor() ...{

return new BedRoomDoor();

}

public Wall getWall() ...{

return new BedRoomWall();

}

}

package com.alex.designpattern.abstractfactory;

/** *//**

* A concrete Door for Bed Room

*/

public class BedRoomDoor implements Door ...{

private String doorName;

public BedRoomDoor() ...{

doorName = "BedRoomDoor";

}

public String getName() ...{

return doorName;

}

}

package com.alex.designpattern.abstractfactory;

/** *//**

* A concrete Wall for Bed Room

*/

public class BedRoomWall implements Wall ...{

private String wallName;

public BedRoomWall() ...{

wallName = "BedRoomWall";

}

public String getName() ...{

return wallName;

}

}

實(shí)際產(chǎn)品_2

package com.alex.designpattern.abstractfactory;

/** *//**

* A concrete Room - Living Room

*/

public class LivingRoom implements Room ...{

public LivingRoom() ...{

System.out.println("Initiated a livingroom.");

}

public Door getDoor() ...{

return new LivingRoomDoor();

}

public Wall getWall() ...{

return new LivingRoomWall();

}

}

package com.alex.designpattern.abstractfactory;

/** *//**

* A concrete Door for Living Room

*/

public class LivingRoomDoor implements Door ...{

private String doorName;

public LivingRoomDoor() ...{

doorName = "LivingRoomDoor";

}

public String getName() ...{

return doorName;

}

}

package com.alex.designpattern.abstractfactory;

/** *//**

* A concrete Wall for Living Room

*/

public class LivingRoomWall implements Wall ...{

private String wallName;

public LivingRoomWall() ...{

wallName = "LivingRoomWall";

}

public String getName() ...{

return wallName;

}

}

最后,當(dāng)然就是抽象工廠咯,不過要注意,這個抽象工廠的意思并不是這個“工廠”是抽象的,而是這個“工廠”加工的“產(chǎn)品”是來自于抽象的。

package com.alex.designpattern.abstractfactory;

/** *//**

* A Room Maker to test our simple Room Abstract Factory.

*

* @author huqi

* @serialData 2007

*/

public abstract class AbstractRoomFactory ...{

public static Room createRoom(String roomType) throws Exception ...{

if (roomType.equals("LivingRoom")) ...{

return new LivingRoom();

} else if (roomType.equals("BedRoom")) ...{

return new BedRoom();

} else ...{

throw new Exception("No this type room: " + roomType);

}

}

public static void showRoom(Room room) ...{

Door door = room.getDoor();

System.out.println("Room door name is: " + door.getName());

Wall wall = room.getWall();

System.out.println("Room wall name is: " + wall.getName());

}

}

總結(jié)

以上是生活随笔為你收集整理的java抽象工厂设计模式_23种经典设计模式的java实现_1_抽象工厂模式的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。