需求
小型的外包项目,给客户A做一个产品展示网站,客户A的朋友感觉效果不错,也希望做这样的产品展示网站,但是要求都有些不同:
1)有客户要求以新闻的形式发布
2)有客户人要求以博客的形式发布
3)有客户希望以微信公众号的形式发布
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;
}
}
享元模式介绍
抽象享元角色:定义享元类。
具体享元角色:实现了享元角色的必要方法。
享元工厂方法:负责创建管理享元角色。
平常不经意就会用到,实际学了也没啥效果........
网友评论