设计模式初学
来源:互联网 发布:漫威宇宙实力排行知乎 编辑:程序博客网 时间:2024/05/01 02:40
单例模式
- 本质:确保类的实例化对象有且仅有一个
- 应用:配置文件、日志、缓存、线程池等
- 优点:避免过多占用资源或者数据同步问题
分类:
饿汉模式:静态化实例跟随类一同加载,无论是否在外部创建实例
step1:实例由构造方法创建,故改写构造方法(public -> private)
确保外部不能随意调用
step2:创建用于返回的私有静态实例,静态确保了唯一性
step3:返回实例的getInstance( )方法懒汉模式:只是声明静态实例,只有当用户获取时才判断并创建实例
step1:构造方法私有化
step2:声明类的唯一实例
step3:获取实例方法
区别:
是否在内部进行实例化
工厂模式
- 目的:实现对象间的低耦合
- 特点:
对象的创建由工厂负责
客户类产品成员面向接口,通过多态获取各工厂的产品
可以按照需求指定特定工厂来生产产品 - 技术支持:
反射,class Properties/File.properties - 简单工厂模式:
所有的产品均由一个工厂生产,根据客户端要求生产出特定的产品,其缺点就是大大增加了工厂类的负担
class Factory{ public Product getProduct1(){ return new Product1(); } public Product getProduct2(){ return new Product2(); }}
- 抽象工厂模式:
- 产品:接口派生出各类产品
eg : class Product1 implements Product
class Product2 implements Product - 工厂:接口派生出用于生产各类产品的工厂
- 产品:接口派生出各类产品
interface ProductFactory{ public Product getProduct();}class Product1Factory implements ProductFactory{ @override public Product getProduct(){ return new Product1(); }}class Product1Factory implements ProductFactory{ @override public Product getProduct(){ return new Product2(); }}
3.客户:创建工厂获得产品
eg:Product p = Product1Factory.getProduct( );
观察者模式
使用场景:
对象间存在依赖关系(理解成星型依赖)当 中心变化时需要其余周围对象及时更新自己。最近学习MQTT协议感觉观察者模式比较适用。使用方法:
观察者://更新方法:public void update()
被观察者:
//维护一个观察者列表 private List<Watcher> watcherList = new ArrayList<Watcher>(); //添加观察者方法 public void addWatcher(Watcher watcher); //删除观察者方法 public void delWatcher(Watcher watcher); //通知观察者方法 public void notifyWatchers();
- 推拉方式
推方式:被观察者维护一个自己的状态(可以考虑JavaBean),当状态发生改变时主动将状态发送给观察者。适用于被观察者比较复杂,观察者必须获得一些信息的情况。
拉模式:观察者主动从被观察者处获得状态,只是被观察者需要提供一个状态获取接口。
1 0
- 初学设计模式
- 初学设计模式
- 设计模式初学结束
- 【初学设计模式】序
- 初学设计模式
- 初学设计模式
- 初学设计模式
- 设计模式初学
- 设计模式初学心得(序)
- 【初学设计模式】Builder (生成器)
- 【初学设计模式】Prototype (原型)
- 【初学设计模式】Bridge (桥接)
- 【初学设计模式】Composite (组合)
- 【初学设计模式】Decorator (装饰)
- 【初学设计模式】Facade (外观)
- 【初学设计模式】Proxy (代理)
- 初学JSP MVC设计模式
- 初学设计模式二(策略模式)
- LintCode解题记录 17.5.3
- linux防火墙设置相关
- 交换机和路由器之间有什么区别?
- 前端开发之React组件化知识
- h5中的表格
- 设计模式初学
- SQL关于视图
- 单例模式
- 【caffe-Windows】mnist实例编译之model的生成(2016-06-27)(原文评论可参考)
- Swat.io如何在两年内从MySQL迁移到PostgreSQL的
- 代理模式 简单理解
- javascript中工厂方法模式祥解(Factory method pattern)
- centos7 设置网络
- 工厂模式