设计模式(二):MonoState模式
2006-12-19 16:42
344 查看
MonoState模式:
先说说MonoState这个单词的意思,设计模式的名字都是很有意思的,因为为了方便交流、记忆,所以设计模式的命名都对该模式的意图进行了表述。Mono是一个词根,英语中Mono,Mon都表示的是1的意思,state意思为"状态"。MonoState的意思就是"单一的状态"。
MonoState模式同Singleton一样也是一种保证单一性的模式。但是它和Singleton模式有意图实现上的差别。Singleton模式是通过将默认构造函数声明为private限制客户端程序对类的直接new创建实例化,并使用static(类属)的方式来保证类的对象单一,而MonoState模式却是将它的构造函数声明为public,而将类中所有的字段声明为static(类属)。换句话说,MonoState并不限制创建对象的个数,但是它的状态却只有一个状态。
实例代码(Java):
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockStart.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedBlock.gif)
public class MonoState ...{
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif)
private static String x;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedSubBlock.gif)
public MonoState()...{}
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedSubBlock.gif)
public String GetX() ...{
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif)
return x;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedSubBlock.gif)
public void SetX(String x) ...{
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif)
MonoState.x = x;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockEnd.gif)
}
MonoState模式的实现很“诡异”啊!它关注的焦点是类所实例化的所有对象只具有惟一状态,而不管客户端程序实例化了多少个MonoState对象。
MonoState的好处是:
1 对客户端程序来说是透明的。客户端程序可以随意创建对象,但是对象的状态是唯一的,这一点客户端不用知道。
2 可继承性。从MonoState派生出来的也是MonoState。实际上,所有的MonoState的派生类都是相同的MonoState的一部分,因为它们都共享相同的static变量。
3 支持多态性。因为MonoState的方法不像Singleton的static方法,它是可以被重写的。
4 易于创建和销毁。
缺点:
1 不能转换。非MonoState类不能通过继承转换为MonoState类。
2 效率。因为它会有对象,所以有许多产生,销毁的过程。这些通常都导致效率降低。
3 空间占用。因为MonoState的变量都是静态的,所以尽管MonoState不被使用,它们同样要占用空间。
4 平台约束。不能够在不同的JVM实体或者不同的平台上使用MonoState。
先说说MonoState这个单词的意思,设计模式的名字都是很有意思的,因为为了方便交流、记忆,所以设计模式的命名都对该模式的意图进行了表述。Mono是一个词根,英语中Mono,Mon都表示的是1的意思,state意思为"状态"。MonoState的意思就是"单一的状态"。
MonoState模式同Singleton一样也是一种保证单一性的模式。但是它和Singleton模式有意图实现上的差别。Singleton模式是通过将默认构造函数声明为private限制客户端程序对类的直接new创建实例化,并使用static(类属)的方式来保证类的对象单一,而MonoState模式却是将它的构造函数声明为public,而将类中所有的字段声明为static(类属)。换句话说,MonoState并不限制创建对象的个数,但是它的状态却只有一个状态。
实例代码(Java):
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockStart.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedBlock.gif)
public class MonoState ...{
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif)
private static String x;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedSubBlock.gif)
public MonoState()...{}
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedSubBlock.gif)
public String GetX() ...{
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif)
return x;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedSubBlock.gif)
public void SetX(String x) ...{
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif)
MonoState.x = x;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockEnd.gif)
}
MonoState模式的实现很“诡异”啊!它关注的焦点是类所实例化的所有对象只具有惟一状态,而不管客户端程序实例化了多少个MonoState对象。
MonoState的好处是:
1 对客户端程序来说是透明的。客户端程序可以随意创建对象,但是对象的状态是唯一的,这一点客户端不用知道。
2 可继承性。从MonoState派生出来的也是MonoState。实际上,所有的MonoState的派生类都是相同的MonoState的一部分,因为它们都共享相同的static变量。
3 支持多态性。因为MonoState的方法不像Singleton的static方法,它是可以被重写的。
4 易于创建和销毁。
缺点:
1 不能转换。非MonoState类不能通过继承转换为MonoState类。
2 效率。因为它会有对象,所以有许多产生,销毁的过程。这些通常都导致效率降低。
3 空间占用。因为MonoState的变量都是静态的,所以尽管MonoState不被使用,它们同样要占用空间。
4 平台约束。不能够在不同的JVM实体或者不同的平台上使用MonoState。
相关文章推荐
- 设计模式(二):MonoState模式
- 设计模式笔记之 - Singleton & Monostate
- 【设计模式】--MONOSTATE模式
- 设计模式袖珍版 连续转载之 - State
- Java设计模式 状态模式(State)
- 设计模式之(十七)状态模式State
- Java设计模式(22)——行为模式之状态模式(State)
- 设计模式实现(十二)--- 状态模式(State)
- 乱砍设计模式之二 -- STATE模式
- java设计模式之State-状态机
- Monostate模式
- 23设计模式之状态模式(State)
- C#面向对象设计模式纵横谈 学习笔记22 State模式(行为型模式)
- 设计模式 (十六)状态模式(State)
- 设计模式之状态模式(State)
- state设计模式学习, 一个C++的实现
- 设计模式之State学习心得
- 设计模式之--Bridge,Command,State,Mediator,Facade
- Java设计模式九:状态模式(State)
- State设计模式详解