Flyweight 享元模式
官方解释:
运用共享技术有效支持大量细粒度的对象。
Flyweight 对象可用于不同的context中,本身固有的状态( ( 内部状态) ) 不随context发生变化,而其他的状态( ( 外部状态) ) 随context 而 变化。
一个享元对象的内部状态在对象被创建出来以后就不再改变。
享元模式如何与工厂模式配合?Flyweight fw = new ConcreteFlyweight();
UML:(享元接口,具体享元,享元工厂)
个人理解:
享元就是将对象们共享的部分抽出来,然后单独作为一个类/对象,作为之前对象的一个传入参数使用。
//当享元对象不是太大时,完全没有必要这么设计……
应用:
汽车厂商想要制造多种类型的车,每类车的长宽高是确定的。
1 | public interface Flyweight{ //Flyweight.java |
Facade 门面模式
官方解释:
为系统中的一组接口提供一个一致的界面,Façade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。
外观模式是简化用户和子系统进行交互的成熟模式,外观模式的关键是为子系统提供一个称作外观的类,该外观类的实例负责和子系统中类的实例打交道。当用户想要和子系统中的若干个类的实例打交道时,可以代替地和子系统的外观类的实例打交道。
UML:(子系统,外观)
个人理解:
为用户提供一个简化操作视图,自动化操作流程,类似傻瓜相机一键拍照。
应用:
报社的广告系统有三个类CheckWord、Charge和TypeSetting类,各个类的职责如下:CheckWord类负责检查广告内容含有的字符数量;Charge类的实例负责计算费用;TypeSetting的实例负责对广告进行排版。使用外观模式简化用户和上述子系统所进行的交互。
1 | public class CheckWord{ //CheckWord.java |
Proxy 代理模式
官方解释:
代理模式是为对象提供一个代理,代理可以控制对它所代理的对象的访问。
UML:(抽象主体,真实主体,代理)
个人理解:
代理类使用另功能类完成用户所需的功能,同时加上一些管控策略。
应用:
用户输入三个代表三角形三边长度的数值,代理对象验证用户输入的三个数值是否能构成三角形,如果能构成三角形,就创建一个三角形对象,并让三角形对象计算自身的面积。
1 | public interface Geometry{ //Geometry.java |