需求
小型的外包項目拍皮,給客戶A做一個產品展示網站签餐,客戶A的朋友感覺效果不錯,也希望做這樣的產品展示網站菱鸥,但是要求都有些不同:
1)有客戶要求以新聞的形式發(fā)布
2)有客戶人要求以博客的形式發(fā)布
3)有客戶希望以微信公眾號的形式發(fā)布
UML
享元模式UML
類結構
享元抽象類: 定義享元對象 和 主要功能
享元實現類: 實現抽象功能
Web工廠類: 單例生產共享部分
User類: 用戶【本案例中沒什么用 就是非用用部分】
測試類: 調用方法 測試功能
代碼實現
測試類
package com.yuan.dp.flyweighty;
public class FlyweihtyTest {
public static void main(String[] args) {
Web工廠類 webFactory = new Web工廠類();
享元實現類 fly_1 = webFactory.getFlyweihty("微博",new User("小明1"));
享元實現類 fly_4 = webFactory.getFlyweihty("微博",new User("小明2"));
享元實現類 fly_2 = webFactory.getFlyweihty("網頁",new User("小紅1"));
享元實現類 fly_5 = webFactory.getFlyweihty("網頁",new User("小紅2"));
享元實現類 fly_3 = webFactory.getFlyweihty("視頻",new User("小賀1"));
享元實現類 fly_6 = webFactory.getFlyweihty("視頻",new User("小賀2"));
fly_1.use();
fly_2.use();
fly_3.use();
fly_4.use();
fly_5.use();
fly_6.use();
webFactory.getSize();
}
}
/*
新聞類型是......微博 用戶類型是....小明1
新聞類型是......網頁 用戶類型是....小紅1
新聞類型是......視頻 用戶類型是....小賀1
新聞類型是......微博 用戶類型是....小明1
新聞類型是......網頁 用戶類型是....小紅1
新聞類型是......視頻 用戶類型是....小賀1
池中一共3個對象
*/
實現部分代碼
package com.yuan.dp.flyweighty;
import java.util.HashMap;
public abstract class 享元抽象類 {
abstract void use();
}
class 享元實現類 extends 享元抽象類{
/**
* 網站類型
*/
private String type;
private User user;
public 享元實現類(String type,User user) {
this.type = type;
this.user = user;
}
@Override
void use(){
System.out.println("新聞類型是......" + type + " 用戶類型是...." + user.getName());
}
}
class Web工廠類{
/**
* Web池
*/
HashMap<String,享元實現類> webPool = new HashMap();
/**
* 獲得一個網站類型
* @param type 網站類型
* @return 網站類型
*/
public 享元實現類 getFlyweihty(String type ,User user){
//如果沒有就往池中放一個
if (!webPool.containsKey(type)){
webPool.put(type,new 享元實現類(type,user ));
}
return webPool.get(type);
}
/**
*
* @return
*/
void getSize(){
System.out.println("池中一共"+webPool.size()+"個對象");
}
}
class User{
/**
* 用戶姓名
*/
private String name;
public User(String name) {
this.name = name;
}
/**
* 獲取用戶姓名
* @return 用戶姓名
*/
public String getName() {
return name;
}
}
享元模式介紹
抽象享元角色:定義享元類。
具體享元角色:實現了享元角色的必要方法躏鱼。
享元工廠方法:負責創(chuàng)建管理享元角色氮采。
平常不經意就會用到,實際學了也沒啥效果........