标签:uml图 his returns void username ssd 验证 == form
单例模式
-
示例
- 登录框
- 购物车
-
类图
- 传统UML类图
classDiagram class SingletonPatternDemo{ +main() void } class SingleObject{ -instance:SingleObject -SingleObject() +getInstance() SingleObject +showMessage() void } SingletonPatternDemo --> SingleObject :asks SingleObject --> SingleObject :returns说明
- 单例模式需要用到java的特性(private)
- ES6中没有(ts除外)
- 只能用java代码来演示UML图的内容
public class SingleObject{ //注意,私有化构造函数,外部不能new,只能内部能new private SingleObject(){} //唯一被new出来的对象 private SingleObject instance = null; //获取对象的唯一接口 public SingleObject getInstance(){ if(instance == null){ //只new一次 instance = new SingleObject(); } return instance; } //对象方法 public void login(username,password){ System.out.println(‘login...‘); } } //测试 public class SingleonPatternDemo{ public static void main(String[] args){ //获取唯一可用的对象 SingleObject object = SingleObject.getInstance(); object.login(); } }
- js中实现:无法完全控制
class SingleObject{ login(){ console.log(‘login……‘); } } //静态方法 SingleObject.getInstance = (function(){ let instance; return function(){ if(!instance){ instance = new SingleObject(); } return instance; } })(); //测试:注意这里只能使用静态函数getInstance,不能new SingleObject() let obj1 = SingleObject.getInstance(); obj1.login(); let obj2 = SingleObject.getInstance(); obj2.login(); console.log(‘obj1 === obj2‘,obj1 === obj2); //true console.log(‘------无法完全控制等情况------‘); let obj3 = new SingleObject(); //无法完全控制 obj3.login(); console.log(‘obj1 === obj3‘,obj1 === obj3); //false
-
场景
- jQuery只有一个$
- 模拟登录框
- 其他
- 购物车(和登录框类似)
- vuex和redux中的store
示例:模拟登录框
/** * 单例模式示例:模拟登录框 */ class LoginForm { constructor() { this.state = ‘hide‘; } show() { if (this.state === ‘show‘) { alert(‘已经显示‘); return; } this.state = ‘show‘; console.log(‘登录框已显示‘); } hide() { if (this.state === ‘hide‘) { alert(‘已经隐藏‘); return; } this.state = ‘hide‘; console.log(‘登录框已经隐藏‘); } } LoginForm.getInstance = (() => { let instance; return () => { if (!instance) { instance = new LoginForm(); } return instance; } })(); //测试 let login1 = LoginForm.getInstance(); login1.show(); let login2 = LoginForm.getInstance(); login2.show(); console.log(‘login1 === login2‘,login1 === login2); //true
-
设计原则验证
- 符合单一职责原则,只能实例化唯一的对象
- 没法具体现开放封闭原则,但是绝对不违反开放封闭原则
单例模式
标签:uml图 his returns void username ssd 验证 == form
原文地址:https://www.cnblogs.com/mrtransition/p/13902856.html
暂无评论...