设计模式(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 条评论
登录 后参与评论

相关文章

来自专栏SHERlocked93的前端小站

JS 原型模式

原型模式(Prototype pattern),用原型实例指向创建对象的类,使用于创建新的对象的类的共享原型的属性与方法。

981
来自专栏PHP在线

5个值得深思的 PHP 面试问题

文章所罗列的问题虽然看似简单,但是每个背后都涵盖了一个或几个大家容易忽视的基础知识点,希望能够帮助到你的面试和平时工作。 Q1 ? 正确运行的输出结果: "y...

2964
来自专栏angularejs学习篇

js中对arry数组的各种操作小结

  最近工作比较轻松,于是就花时间从头到尾的对js进行了详细的学习和复习,在看书的过程中,发现自己平时在做项目的过程中有很多地方想得不过全面,写的不够合理,所以...

832
来自专栏我是攻城师

你不知道的Java的split的小问题

2756
来自专栏野路子程序员

【野路子】正则表达式~极速入门图文教程

3248
来自专栏Crossin的编程教室

【Python 第17课】 类型转换

昨天又被微信后台给坑了,导致有些同学收了2遍消息。希望今天能顺利发成功。。。 #==== 类型转换 ====# python的几种最基本的数据类型,我们已经...

2726
来自专栏编程

Python精华之函数

各位小伙伴,大家周一快乐! 不知道刚刚过去的周末大家过的怎么样? 反正常老师是被糊里糊涂的过了个圣诞节 满大街的商场和超市都张灯结彩,话说,不是有规定不让过这种...

1965
来自专栏向治洪

迭代器模式

迭代器模式(Iterator): 提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露其内部的表示。 用途:在软件构建过程中,集合对象内部结构常常变化各异。...

18310
来自专栏C语言及其他语言

[每日一题]排列

题目描述 有4个互不相同的数字,输出由其中三个不重复数字组成的排列。 输入 4个整数。 输出 所有排列 样例输入 1 2 3 4 样例输出 1 2 3 1 3 ...

3507
来自专栏C/C++基础

C++11新特性——大括号初始化

虽然C++03提供了多样的对象初始化方式, 但不能提供自定义类型对象的大括号初始化方式,也不能在使用new[]的时候初始化POD 数组。幸好,C++11扩充了大...

432

扫码关注云+社区