设计模式(1)

  注:本文章示例为C#代码,设计模式通用任何编程语言,可放心阅读

设计模式(3W1H)

  What?针对特定问题特出的特定的解决方案

  Why?让程序有更好的可扩展度

  Where?一般情况下,开发中真正使用设计模式的地方不多。面试---JVM底层机制 模式 框架底层应用了很多设计模式

  How?任何时候、任何场合、任何语言都符合自己所制定的规则

一.单例模式

一个类只有一个全局实例

     //构造私有
        private FrmPlay()
        {
            InitializeComponent();
        }
        //2.静态成员变量
        private static FrmPlay play;
        //3.定义一个公有的  静态的 返回类类型的方法
        public static FrmPlay GetInstance() 
        {
            if (play==null)
            {
                play = new FrmPlay();
            }
            return play;
        }
//省略调用代码

保证步骤:单例(一个类在内存中只能有一个对象)三条件

    1. 类构造设置私有

    2. 定义一个私有的静态的类类型变量

    3. 定义一个共有的静态方法 并且方法返回值类型为类类型的方法

二.简单工厂模式

一个工厂方法,依据传入的参数,生成对应的具体产品对象;

    工厂方法一般设成静态方法,返回值一般是抽象类或接口,具体的产品类一般继承或实现抽象类、接口;

    优点:产品使用者不需要关心产品类的创建过程,与具体产品的实现类达到解耦的效果;

    缺点:违背"开放--封闭"原则(OCP),因为新增一个产品类的时候,需要修改原先的工厂方法;

    适用场合:当工厂类负责创建的对象比较少的时候;

     public static Calculater GetInstace(string oper) 
        {
       //父类
            Calculater calc = null;
            //3.进行判定  运算符和 +   -
            switch (oper)
            {
           /*
          *各子类---里氏替换原则
          **/

                case "+":
                    calc = new Add();
                    break;
                case "-":
                    calc = new Sub();
                    break;
                case "*":
                    calc = new Multi();
                    break;
                case "/":
                    calc = new Div();
                    break;
                default:
                    break;
            }
            return calc;
        }

保证步骤:

    1.创建的对象比较少

    2.公有静态返回值为父类类型的方法

    3.里氏替换的子类(也就是swich中)继承自抽象父类

未完,待续。。。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏学习有记

[LeetCode Python3]566. Reshape the Matrix(重塑矩阵)

在MATLAB中,有一个非常有用的函数 reshape,它可以将一个矩阵重塑为另一个大小不同的新矩阵,但保留其原始数据。

822
来自专栏Java帮帮-微信公众号-技术文章全总结

Java基础-06.总结二维数组,面向对象

1:二维数组(理解) (1)元素是一维数组的数组。 (2)格式: A:数据类型[][] 数组名 = new 数据类型[m][n]; B:数据类型[][]...

2404
来自专栏程序员互动联盟

【编程基础】Java的接口和抽象类

对于面向对象编程来说,抽象是它的一大特征之一。在Java中,可以通过两种形式来体现OOP的抽象:接口和抽象类。这两者有太多相似的地方,又有太多不同的地方。很多人...

2697
来自专栏人工智能LeadAI

讨厌算法的程序员 | 第七章 归并排序的时间复杂度分析

上一篇归并排序基于分治思想通过递归的调用自身完成了排序,本篇是关于归并排序的最后一部分——分析其时间复杂度。 这个过程中会解释清楚在各种时间复杂度中经常看到的一...

34211
来自专栏java一日一条

30 分钟 Java Lambda 入门教程

Lambda作为函数式编程中的基础部分,在其他编程语言(例如:Scala)中早就广为使用,但在Java领域中发展较慢,直到java8,才开始支持Lambda。

814
来自专栏calmound

ACdream 孟竹要减肥?(prim)

刚开始题目看错了,一直wa,输入的坐标是浮点型。。。。。。。 听了队友的,才知道prim算法只需要枚举到sqrt(n)就完全足够了,发现sqrt(n)好多地方用...

2756
来自专栏算法channel

其他|二维指针,数组指针,指针数组

望时间的流逝不仅仅丰富了我们的阅历,更重要的是通过提炼让我们得以升华,走向卓越。 1c++ c/c++的重要性毋庸置疑,凡是对性能要求很高的系统和算法,其中核...

2505
来自专栏带你撸出一手好代码

Java元组的使用

元组在计算机领域有着特殊的意义,这个名字听起来似乎有些陌生, 平时在写代码也基本没什么应用场景, 然而, 出人意料的是, 元组跟程序设计密切相关, 可能有的同学...

3328
来自专栏信数据得永生

JavaScript 编程精解 中文第三版 三、函数

2957
来自专栏机器学习实践二三事

单链表判断是否有环和环起始节点

面试的滴滴研究院暑期实习生,岗位机器学习,二面除了电话面还要视频面试写代码,两个问题: 单链表判断是否有环以及找出环开始的节点 建立二叉排序树并进行中序遍历 因...

1758

扫描关注云+社区