博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
研读设计模式小结
阅读量:6852 次
发布时间:2019-06-26

本文共 2585 字,大约阅读时间需要 8 分钟。

1. 设计模式:

  指在软件开发过程中,经过验证的,用于解决在特定环境下、重复出现的、特定问题的解决方案。

2. 简单工厂:

  本质: 选择实现。

注意:简单工厂的重点在选择,实现是已经做好的。简单工厂的目的在于为客户端来选择相应的实现,从而使得客户端与实现之间解耦。

实现简单工厂的难点在于“如何选择”实现,有传递参数的方法,有动态参数的方法。

/**简单工厂 */public class Factory {
    public static Api create_GetApi(int type) {
    Api api = null;     if (type == 1) {
        api = new Api1();     } else if (type == 2) {
        api = new Api2();     }          return api;     } }

使用时:

Api api = Factory.create_GetApi( 1 );

3. 外观模式 Facade

  本质:封装交互,简化调用。

  外观模式封装了子系统外部和子系统内部多个模块的交互过程,从而简化了外部的调用。通过外观,子系统为外部提供一些高层的接口,方便使用。

  客户端不需要去关心子系统内部模块的变动情况,只与这个外观类有依赖关系。

/*外观模式 Facade*/public class FacadeApi {        private FacadeAp i ( ) {    }        public static void test ( ) {    AModuleApi a = new AModuleImpl();    a.testA();    BModuleApi b = new BModuleImpl();    b.testB();    CModuleApi c = new CModuleImpl();    c.testC();    }}/*外观模式 Facade*/public interface FacadeApi{        //对外提供的组合方法    public void test();        //这些是ABC模块对子系统外的接口    public void a1();    public void b1();    public void c1();}

4.  适配器模式

  本质:转换匹配,利用功能

  适配器通过转换现在的实现,从而能把已有的实现匹配成需要的接口。转换匹配是手段,利用已有的功能才是目的。

  在实现的时候,适配器通常是一个类,一般会让适配器类去实现Target接口,然后在适配器的具体实现里面调用Adaptee。也就是说,适配器通常是一个Target类型,而不是Adaptee类型。

public class TwoDirectAdapter implements LogDBApi, LogFileApi {        private LogDBApi dbLog;    private LogFileApi fileLog;        public TwoDirectAdapter( LogDBApi db , LogFileApi file) {       this.dbLog = db;       this.fileLog = file;    }        /*把文件操作的方式适配成DB实现方式;*/    public void createLog( LoginModule lm) {        // 1. 读取文件内容;        // 2. 加入新的日志对象;        // 3. 重新写入文件;    }}

5. 单例模式 Singleton

  本质: 控制实例数目

  单例模式是用来保证这个类在运行期间只会被创建一个类实例,另外,单例模式还提供了一个全局唯一访问这个类实例的访问点。

/*  懒汉式单例 */public class Singleton {        private static Singleton uniqueInstance = null;    private Singleton() {}        public static synchronized Singleton getInstance ( ) {           if ( uniqueInstance == null ) {           uniqueInstance = new Singleton();       }           return uniqueInstance;    }}/*  饿汉式单例 */public class Singleton {        private static Singleton uniqueInstance =  new Singleton();    private Singleton() {}       public static  Singleton getInstance ( ) {        return uniqueInstance;    }}
/* 最优的单例 */public class Singleton {        private static class SingletonHolder{      private static Singleton uniqueInstance =  new Singleton();     }    private Singleton() { }       public static  Singleton getInstance ( ) {        return SingletonHolder.uniqueInstance;     } }
 

 

 

转载于:https://www.cnblogs.com/surong/archive/2012/04/09/2439168.html

你可能感兴趣的文章
JavaWeb综合案例-键盘模拟
查看>>
Android Day03-SQLite数据库操作及ListView详解
查看>>
Looking for APAC Operations IT XML Database Developer in Shenzhen and Hongkong
查看>>
Myeclipse常用快捷键
查看>>
我的友情链接
查看>>
Unity3d多线程
查看>>
炉石传说 C# 开发笔记 (源代码整理公开)
查看>>
前端文摘:Web 开发模式演变历史和趋势
查看>>
最大子数组和问题的解
查看>>
cout设置输出数据不显示科学计数法
查看>>
zoj 1659 Mobile Phone Coverage(矩形面积并)
查看>>
python学习 day3
查看>>
Centos 6.4下用Squid配置反向代理多个内网WEB服务器
查看>>
王者荣耀之父姚晓光“奇葩”的工作理念
查看>>
Flask 信号
查看>>
Extjs checkbox数值回显
查看>>
SpringBatch配置数据库
查看>>
SVN使用svn+ssh协议连接服务器时重复提示输入密码 解决办法
查看>>
微信公众平台开发(107) 分享到朋友圈和发送给好友
查看>>
GeoTiff如何存储颜色表的研究
查看>>