1.簡單工廠設計模式
簡單工廠模式(Simple Factory Pattern)屬于類的創新型模式,又叫靜态工廠方法模式(Static FactoryMethod Pattern),是通過專門定義一個類來負責建立其他類的執行個體,被建立的執行個體通常都具有共同的父類。
1.1簡單工廠設計模式UML圖:

1.2簡單工廠設計模式實作代碼:
public interface Food {
public void get();
}
public class McChicken implements Food{
public void get(){
System.out.println("我要一份麥香雞");
}
}
public class Chips implements Food{
public void get(){
System.out.println("我要一份薯條");
}
}
現在建立一個食物加工工廠
public class FoodFactory {
public static Food getFood(String type) throws InstantiationException, IllegalAccessException, ClassNotFoundException {
if(type.equalsIgnoreCase("mcchicken")) {
return McChicken.class.newInstance();
} else if(type.equalsIgnoreCase("chips")) {
return Chips.class.newInstance();
} else {
System.out.println("哎呀!找不到相應的執行個體化類啦!");
return null;
}
}
}
1.3簡單工廠設計模式的優點和缺點
優點:工廠類是整個模式的關鍵所在。它包含必要的判斷邏輯,能夠根據外界給定的資訊,決定究竟應該建立哪個具體類的對象。使用者在使用時可以直接根據工廠類去建立所需的執行個體,而無需了解這些對象是如何建立以及如何組織的。有利于整個軟體體系結構的優化。
缺點:簡單工廠模式違背了“開放封閉原則”,就是違背了“系統對擴充開放,對修改關閉”的原則。建立何種種類産品的産品互相混淆在了一起,違背了單一職責,導緻系統喪失靈活性和可維護性。
2.擴充卡模式
講一個類的接口轉換成客戶希望的另外一個接口。Adapter模式使得原本由于接口不相容而不能一起工作的那些類可以一起工作了。
也就是說 系統的資料和行為都正确,但接口不符合時,我們應該考慮擴充卡,目的是使控制範圍之外的一個原有對象與某個接口比對。擴充卡模式主要應用于希望複用一些現存的類,但接口又與複用環境不一緻的情況。
2.1擴充卡模式的類圖
2.2擴充卡模式的代碼實作
public class Target
{
public virtual void Request()
{
Console.WriteLine("This is a common request");
}
}
/// <summary>
/// 定義需要适配的類
/// </summary>
public class Adaptee
{
public void SpecificRequest()
{
Console.WriteLine("This is a special request.");
}
}
/// <summary>
/// 定義擴充卡
/// </summary>
public class Adapter:Target
{
// 建立一個私有的Adeptee對象
private Adaptee adaptee = new Adaptee();
/// <summary>
/// 通過重寫,表面上調用Request()方法,變成了實際調用SpecificRequest()
/// </summary>
public override void Request()
{
adaptee.SpecificRequest();
}
}
2.3擴充卡模式的優點和缺點
優點:
通過擴充卡,用戶端可以調用同一接口,因而對用戶端來說是透明的。這樣做更簡單、更直接、更緊湊。
複用了現存的類,解決了現存類和複用環境要求不一緻的問題。
将目标類和适配者類解耦,通過引入一個擴充卡類重用現有的适配者類,而無需修改原有代碼。
一個對象擴充卡可以把多個不同的适配者類适配到同一個目标,也就是說,同一個擴充卡可以把适配者類和它的子類都适配到目标接口。
缺點:
對于對象擴充卡來說,更換擴充卡的實作過程比較複雜。
3.接口模式
接口型模式組成 : 該模式包括擴充卡模式,外觀模式,合成模式,橋接模式 四種模式;
目的:利用現有的類,滿足需要的接口
3.1接口模式的代碼實作
- public class ShowRocketTable {
- public static void main(String[] args) {
- setFonts();
- JTable table = new JTable(getRocketTable());
- table.setRowHeight(36);
- JScrollPane pane = new JScrollPane(table);
- pane.setPreferredSize(new java.awt.Dimension(300, 100));
- display(pane, " Rockets");
- }
- public static void display(Component c, String title) {
- JFrame frame = new JFrame(title);
- frame.getContentPane().add(c);
- frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
- frame.pack();
- frame.setVisible(true);
- }
- private static RocketTableModel getRocketTable() {
- Rocket r1 = new Rocket("Shooter", 1.0, new Dollars(3.95), 50.0, 4.5);
- Rocket r2 = new Rocket("Orbit", 2.0, new Dollars(29.03), 5000, 3.2);
- return new RocketTableModel(new Rocket[] { r1, r2 });
- }
- private static void setFonts() {
- Font font = new Font("Dialog", Font.PLAIN, 18);
- UIManager.put("Table.font", font);
- UIManager.put("TableHeader.font", font);
- }
- }
轉載于:https://www.cnblogs.com/6zhi/p/5578304.html