黑马程序员----(笔记整理----高薪课程一 ---扩展(享元模式))
来源:互联网 发布:天猫网购商城淘宝 编辑:程序博客网 时间:2024/06/05 09:44
----------------------android培训、java培训、期待与您交流!----------------------
享元模式,按个人理解就是将共性属性或者方法抽取,形成一个个接口或者抽象类或者方法等。享元模式有两分:内部状态,外部状态。以方法为例:内部状态指的是该方法里边特有的属性或者变量。而外部状态指的是给这个方法传入的参数。
下边的解释是在网上找的资料,所谓享元模式,说在一个系统中如果有多个相同的对象,那么只共享一份就可以了,不必每个都去实例化一个对象。在该模式中,包括抽象的享元,具体的享元,享元工厂以及客户端。其中抽象的享元为公共接口或抽象类,具体的享元实现抽象享元角色所规定的接口,享元工厂负责创建和管理享元角色。
下面写了一个程序实现享元模式:包括抽象享元角色Person.java,两个具体享元角色OldFlyweight.java和YoungFlyweight.java,享元工厂FlyweightFactory.java,最后是一个客户端测试类ClientTest_Flyweight.java。
Person.java:
2/**
3 * 一个普通的抽象类,人
4 * @author lvwenyong
5 *
6 */
7public abstract class Person {
8 /**
9 * 为了享元模式中的方便一些,没有加入private修饰符
10 * 另外为了另一个包下的使用,用protectd修饰
11 */
12 protected String personName;
13 protected int personAge;
14
15 //右键Source->Generate Getters and Setters
16 public String getPersonName() {
17 return personName;
18 }
19
20 public void setPersonName(String personName) {
21 this.personName = personName;
22 }
23
24 public int getPersonAge() {
25 return personAge;
26 }
27
28 public void setPersonAge(int personAge) {
29 this.personAge = personAge;
30 }
31
32 /**
33 * 抽象方法
34 */
35 public abstract void sayHello();
36
37}
38
39
OldFlyweight.java:
2
3import com.xpec.landon.trainjava.oop.Person;
4
5/**
6 * 具体的一个享元,继承自Person
7 * @author lvwenyong
8 *
9 */
10public class OldFlyweight extends Person{
11
12 public OldFlyweight(int age)
13 {
14 this.personAge = age;
15 }
16 public void sayHello()
17 {
18 System.out.println("Hello,I'm the young!");
19 }
20}
21
22
YoungFlyweight.java:
2
3import com.xpec.landon.trainjava.oop.Person;
4
5/**
6 * 具体的一个享元,继承自Person
7 * @author lvwenyong
8 *
9 */
10public class YoungFlyweight extends Person{
11
12 public YoungFlyweight(int age)
13 {
14 this.personAge = age;
15 }
16
17 public void sayHello()
18 {
19 System.out.println("Hello,I'm the old");
20 }
21}
22
23
FlyweightFactory.java:
2import java.util.*;
3
4import com.xpec.landon.trainjava.oop.Person;
5/**
6 * 享元工厂
7 * @author lvwenyong
8 *
9 */
10
11public class FlyweightFactory {
12 //这里用Hashtable,当然也可以用ArrayList等。
13 private Hashtable agedPersons = new Hashtable();
14
15 /**
16 * 创建和管理享元
17 * 如果没有创建具体享元,则创建。
18 * 已创建,则直接获取
19 * @param age 年龄
20 * @return 抽象享元
21 */
22 public Person getFlyweight(int age)
23 {
24 Person person = (Person)agedPersons.get(age);
25
26 if(person != null)
27 {
28 if(age == person.getPersonAge())
29 {
30 //输出信息方便查看
31 System.out.println("person-" + age + "被直接获取");
32 }
33 }
34
35 if(person == null)
36 {
37 switch (age) {
38 case 25:
39 person = new YoungFlyweight(age);
40 break;
41 case 80:
42 person = new OldFlyweight(age);
43 default:
44 break;
45 }
46
47 //输出信息方便查看
48 System.out.println("person-" + age + "新被创建");
49
50 agedPersons.put(age, person);
51 }
52
53 return person;
54 }
55
56}
57
58
ClientTest_Flyweight.java:
2
3import com.xpec.landon.trainjava.oop.Person;
4
5/**
6 * 享元模式中的客户端角色
7 * @author lvwenyong
8 *
9 */
10public class ClientTest_Flyweight {
11 public static void main(String []args)
12 {
13 FlyweightFactory flyweightFactory = new FlyweightFactory();
14
15 //第一次测试,应该是直接创建
16 Person oldFlyweight1 = flyweightFactory.getFlyweight(80);
17 Person youngFlyweight1 = flyweightFactory.getFlyweight(25);
18
19 System.out.println(oldFlyweight1.getPersonAge());
20 System.out.println(youngFlyweight1.getPersonAge());
21
22 //第二次测试,应该是直接获取
23 Person oldFlyweight2 = flyweightFactory.getFlyweight(80);
24 Person youngFlyweight2 = flyweightFactory.getFlyweight(25);
25
26 System.out.println(oldFlyweight2.getPersonAge());
27 System.out.println(youngFlyweight2.getPersonAge());
28
29 }
30
31}
32
33
下面是程序运行截图:
可以看到,第一次使用的时候是直接创建,以后再用到该对象的时候则是直接获取该对象。这就是享元模式的好处。
----------------------android培训、java培训、期待与您交流!----------------------
- 黑马程序员----(笔记整理----高薪课程一 ---扩展(享元模式))
- 笔记整理----高薪课程一 ---扩展(享元模式))
- 黑马程序员----(笔记整理-------高薪课程一)
- 黑马程序员-----(高薪课程一-----扩展(反射))
- 黑马程序员-------笔记整理(高薪课程二)
- 笔记整理-------(高薪课程一)
- 高薪课程一-----扩展(反射))
- 笔记整理(高薪课程二)
- 黑马程序员---享元模式
- 黑马程序员------享元模式
- 黑马程序员_高薪技术(一)
- 黑马程序员前端培训:用好课程打造高薪学员
- 黑马程序员前端培训:用好课程打造高薪学员
- 黑马程序员_高薪技术笔记
- 黑马程序员_享元模式
- 黑马程序员---高新技术 享元模式
- 黑马程序员-享元设计模式
- 黑马程序员:享元设计模式
- jboss的7类性能调优
- PHP程序员经常犯的10种错误
- apache+php环境搭建
- 数字转换成字符方法_MessageBox中显示数字
- 第39条:必要时进行保护性拷贝
- 黑马程序员----(笔记整理----高薪课程一 ---扩展(享元模式))
- php面向对象程序设计(OOP)的61条准则
- Apache OFBiz Development The Beginners Tutorial 翻译 前言
- 备份 spring 事务
- Apache OFBiz Development The Beginners Tutorial 翻译之一 前言
- Linux的网络配置及操作命令
- Apache OFBiz Development The Beginners Tutorial 翻译之二 开始OFBiz
- Apache OFBiz Development The Beginners Tutorial 翻译之三 使用Derby——OFBiz原装数据库
- Apache OFBiz Development The Beginners Tutorial 翻译之四 运行OFBiz