接下來用**來實現上面的例子
1),建立抽象享元類介面 與建立具體享元類
/**
*享元介面類
*/public inte***ce chessflyweight
/**concreteflyweight
* 共享享元類
*/class concretechess implements chessflyweight
@override
public void position(chessposition chessposition)
@override
public string getcolor()
}
2),建立非共享享元類
/**unsharedconcreteflyweight
* 非共享享元類
* @author 曉電腦
*/public class chessposition
public int getx()
public void setx(int x)
public int gety()
public void sety(int y)
}
3),建立享元工廠類
/**享元工廠類
* flyweightfactory
* @author 曉電腦
*/public class chessflyweightfactory else }}
4),建立客戶端進行測試
/**客戶端進行測試
* @author 曉電腦
*/public class client
}
執行結果
總結:棋子的顏色顏色實現了共享,返回的都是乙個物件,棋子的外部狀態發生了改變,因為你每次都是從外部傳進來的,這樣可以用乙個專門的類進行處理,這樣外部狀態和內部狀態進行了分離,相互不影響
Java 設計模式 享元模式
在介紹享元模式之前,先來看乙個問題。假設要你去做一款撲克牌遊戲,你會針對撲克牌設計一種怎樣的資料結構呢?因為撲克牌有四種花色,也即紅桃 heart 黑桃 spade 方塊 diamond 梅花 club 有 13 種不同的大小,也即 a k 還有大小王,所以這個類應該很好設計,如下所示 public...
java設計模式 享元模式
使用共享物件可有效地支援大量細粒度物件 因為分配太多的物件到應用程式中將有損程式的效能,同時還容易造成記憶體溢位.1.內部狀態是物件可共享出來的資訊,儲存在享元物件的內部並且不會隨環境的改變而改變.他們可以作為乙個物件的動態附加資訊,不必直接儲存在具體的某個物件中,屬於可以共享的部分.2.外部狀態是...
JAVA設計模式 享元模式
享元模式 運用共享技術有效地支援大量細粒度的物件。介面有方法,具體類實現介面中的方法,工廠生產該實體,若存在則直接返回,不存在則new乙個新的物件返回,無論客戶端呼叫多少次,只產生了乙個實體。享元模式可以避免大量非常相似類的開銷。在程式設計中,有時需要生成大量細粒度的類例項來表示資料。如果這些例項除...