• .net学习笔记--设计模式


    设计模式都有哪些?

    按照GOF提出,23种,按照目的分为:创建型(creational)、结构性(structural)、行为型(behavioral)。

    一、创建型:

        1、Singleton 单例模式。                                   一个类的唯一实例。

        2、Factory Method 工厂模式。                         被实例化的子类。(父类.子类方法())

        3、Abstract Factory 抽象工厂模式。                  产生对象家族。(声明返回父类型的方法)

        4、Builder 生成器模式。                                   如何创建一个组合对象。

        5、Prototype 原型模式。                                   被实例化的类。

    二、结构型:

        1、Adapter 适配器模式。                                对象的接口  (旧接口/类和新接口/类相结合)

                                                                        http://www.cnblogs.com/wangjq/archive/2012/07/09/2582485.html

        2、Bridge 桥模式。                                        对象的实现。(父类声明一个对象,将子类实现方法传递到父类对象中)

                                                                        http://www.cnblogs.com/houleixx/archive/2008/02/23/1078877.html

        3、Composite 组成模式。                                 一个对象的结构和组成。

        4、Decorator 装饰模式。                                  对象的职责,不生产子类。

        5、Facade 外观模式。                                      一个子系统的接口。

        6、Flyweight 享元模式。                                   对象的存储开销。

        7、Proxy 代理模式。                                         如何访问一个对象;该对象的位置。

    三、行为型:

        1、Chain Of Responsibility 职责链模式。          满足一个请求的对象。

        2、Command 命令模式。                                  何时、怎样满足一个请求。

        3、Interpreter 解释器模式。                              一个语言的文法及解释。

        4、Iterator 迭代器模式。                                    如何遍历、访问一个聚合的各元素。

        5、Mediator 中介者模式。                                 对象间怎样交互、和谁交互。

        6、Memento 备忘录模式。                                一个对象中哪些似有信息存放在该对象之外,以及在什么时候存储。

        7、Observer 观察者模式。                                多个对象依赖于另一个对象,而这些对象又如何保持一致

                                                                           观察者模式:http://www.cnblogs.com/lane_cn/articles/73240.html
     
                                                                                          http://www.cnblogs.com/MRRAOBX/articles/2543586.html

                                                                                           http://www.cnblogs.com/0515offer/p/4286214.html

        8、State 状态模式。                                          对象的状态

        9、Strategy 策略模式。                                     算法

        10、Template Method 模板模式。                     算法中的某些步骤。

        11、Visitor 访问者模式。                                   某些可作用于一个(组)对象上的操作,但不修改这些对象的类。

     设计模式理解:http://www.cnblogs.com/XmNotes/p/4342930.html

    设计模式总结:http://www.cnblogs.com/zhili/p/DesignPatternSummery.html

     观察者模式与发布订阅模式

    观察者设计模式总结(以大话设计模式前台为例):

    1,声明前台接口,定义前台方法例如:注册,取消,发布消息

    2,实现前台接口,并且把 需要通知的对象,添加到前台类里

    3,声明一个抽象的通知对象,定义通知对象里的操作方法,也就是得到通知后的进行的操作。

    注意,抽象方法的构造函数,是有前台类的声明为参数

    4,继承抽象通知对象,并且实现抽象通知对象的方法

    5,开始发布:先实例化前台类,然后实例化通知对象类,将前台类作为参数放到前台类中;

        前台类订阅事件,前台类发布事件

    简单工厂模式(以大话模式加减乘除为例):

    1,声明一个父类(存储两个运算数和一个GetResult虚方法)

    2,分别写加,减,乘,除四个方法,继承父类,重写GetResult方法

    3,写一个工厂类,返回类型为父类型,在里面用swich...case做运算符判断,返回new加(),new 减(),new 乘()

    4,开始输出:声明父类,以父类的形式=工厂类.工厂方法("运算符"),以父类形式.运算数1=2,以父类型是.运算数2=3

         以父类形式.GetResult()

    工厂方法模式(以加减乘除为例):

    1,将简单工厂的工厂类进行拆解,换成接口(一个工厂类)

    interface CreateOperator

    {

          父类型  CreateOperator();

    }

    2,分别写加减乘除四个类: 加工厂(),减工厂(),继承该接口,

    类中的方法返回  new 加()实例;new 减()实例;new 乘实例; new 除()实例;

    3,开始输出:工厂接口 xxx =new 加工厂();

       xxx.加工厂类中方法(return new 加());

    工厂方法模式采用接口,简单工厂模式不采用接口,工厂方法模式让子类决定按需求实例化哪个类。

    简单工厂--》工厂方法--》抽象工厂

    抽象工厂模式(大话设计模式的数据访问为例):

    跟工厂方法类似,但是工厂方法只有一个抽象类(接口),多个实例

    而抽象工厂模式有多个抽象类(接口)

    区别:

     工厂方法模式:一个抽象产品类,可以派生出多个具体产品类。   
                         一个抽象工厂类(接口),可以派生出多个具体工厂类。 
                     每个具体工厂类只能创建一个具体产品类的实例。 
    抽象工厂模式:多个抽象产品类,每个抽象产品类可以派生出多个具体产品类。 
                     一个抽象工厂类(接口),可以派生出多个具体工厂类。 
                     每个具体工厂类可以创建多个具体产品类的实例。 
                区别:工厂方法模式只有一个抽象产品类,而抽象工厂模式有多个。
                    工厂方法模式的具体工厂类只能创建一个具体产品类的实例,而抽象工厂模式可以创建多个。

    反射+抽象工程实现数据访问

    IUser result=(IUser)Assembly.Load("当前程序集").CreateInstance("当前命名空间.要实例化的类名");

    工厂类其实就是返回一个new 实例,只不过简单工厂声明了父类,工厂方法/抽象工厂声明了接口

  • 相关阅读:
    js 模拟表单提交下载文件
    vue 刷新子组件方法解决使用v-if闪屏问题
    Java15-Tomcat&Servlet&HTTP&Request&Response
    JAVA26-SpringBoot-在线教育项目01
    20 Vue-ajax
    19 Vue-JQuery
    18 Vue-Json
    Java 20-Mybatis学习
    17 Vue-ES6语法之Promise、VueX、网络请求封装
    16 Vue-cli脚手架介绍与使用
  • 原文地址:https://www.cnblogs.com/changrulin/p/5305265.html
Copyright © 2020-2023  润新知