死磕-设计模式(一)

简介: 死磕-设计模式(一)

一、为什么我要写设计模式呢

1、优化自己的代码,让自己的代码阅读更好一些,多学习下设计模式,有自己代码质量的提高

2、但是设计模式用的很好的时候,团队协作的时候会很困难,因为也要考虑团队成员的情况。

3、但是我认为当你学好设计模式的思想,真的可以让你的代码更上一层楼。

二、代码无错就是优吗? -----简单工厂模式

1、写一个新手写代码的例子:

2、上面的代码,缺点如下:

a、变量命名 A,B,C, D 是不规范的。

b、判断分支,这样的写法,意味着每个条件都要做判断,等于计算机做了三次无用功。

c、如果在除法的时候,客户输入了0怎么办,如果用户输入的是字符符号而不是数字怎么办?

3、基于上面的代码的再一次修改如下:

4、基于上面的代码的缺点如下:

a、当我们碰到上面类似的一个程序的问题的时候,我们就很直觉的用计算机能够理解的逻辑来描述和表达待解决的问题及具体的求解过程。

b、比如上面的计算器这个程序,但这样的思维却使得我们的程序只为满足当前的需求。

c、但是程序不容易维护,不容易扩展,更不容易复用。从而达不到高质量代码的要求。

5、用面向对象的原则:

a、通过封装,继承,多态把程序的耦合度降低,用设计模式使得程序更加的灵活,容易修改,并且易于复用。

b、有人说初级程序员的工作就是Ctrl+C和Ctrl+V,这其实是非常不好的编码习惯,因为当你的代码中重复的代码多到一定程度,维护的时候,可能就是一场灾难。

c、越大的系统代码,这种方式带来的问题越严重,编程有一定原则,就是用尽可能的办法去避免重复。

6、实现用面向对象的方式编程-封装:

a、让业务逻辑和界面的逻辑分开,让他们之间的耦合度降低,只有分开,才可以达到容易维护和扩展。

b、代码如下:

c、上面的代码就是把业务和界面分离开了。达到了复用的效果,因为不但在windows版本的计算器可以用它,手机上的计算器也可以复用这个类。

7、松耦合

a、基于上面的用面向对象的封装的思想的代码能否做到灵活的可扩展和可修改呢?

b、如果我希望增加一个开根的运算,该如何去修改呢?有人会想基于上面的代码在switch中加一个分支就行了。

c、问题如果加一个平方根运算,却需要让加减乘除的运算都参与编译,如果一不小心,把加法改成减法就不好了,本来是想让你添加一个新功能,却使得原有运行良好的代码产生了变化,这个风险太大了。

8、运用松耦合的思想来改造上面的代码:

a、上面的代码是首先有一个运算的类,它有两个属性NubmerA,NumberB,主要用于计算器的前后数,然后有一个虚拟的方法GetResult(),用于得到结果。

b、然后把加减乘除都写成了运算类的子类,继承它之后,重写了GetResult()方法,这样如果修改了任何一个算法,就不需要提供其他的算法的代码了。

c、但是问题来了,我如何让计算器知道我是希望用哪一个算法呢?

9、基于上面的代码的问题采用简单工厂的方案来解决

a、问题是如何去实例化对象的问题,到底要实例化谁,将来会不会增加实例化的对象,比如增加开平方根。

b、这里很容易变化的地方,应该考虑到用一个单独的类来做这个创造实力的过程,这个就是工厂

10、代码实现:

a、这样只要输入运算符号,工厂就会实例化出合适的对象,通过多态,返回父类的方式实现了计算器的结果。

b、这样以后需要加各种复杂的运算的时候,只需要增加相应的运算子类就可以了,然后在工厂类的里面加switch的分支代码


今天先到这了,明天见~~

相关文章
|
2月前
|
设计模式 算法
死磕-设计模式(二)
死磕-设计模式(二)
|
2月前
|
设计模式 算法 测试技术
死磕-设计模式(四)
死磕-设计模式(四)
|
2月前
|
设计模式 算法
死磕-设计模式(三)
死磕-设计模式(三)
|
6月前
|
设计模式 Java 开发者
一目了然!谁能想到Java多线程设计模式竟然被图解,看完不服不行
多线程设计模式在Java编程中起着至关重要的作用,它能够有效提高程序的执行效率,使得程序在处理大量数据和复杂任务时更加高效。然而,对于初学者来说,理解和应用多线程设计模式可能是一项相当具有挑战性的任务。为了让读者更加轻松地掌握这一复杂主题,我们带着一种全新的图解方式,深入剖析Java多线程设计模式的精髓。
|
设计模式 安全 调度
设计模式——单例模式(面试手撕顶呱呱)
设计模式——单例模式(面试手撕顶呱呱)
阿里面试官:使用策略模式+工厂模式干掉代码中过多的if-else
过多if-else项目背景 如果一开始就知道现在的业务需要,大部分人都不会在代码里添加过多的if-else判断的,烂代码基本都是刚开始写代码时并没有太多的需求,随着期需求不断的修改增加,开发时间也较的紧张,代码往往都是怎么快速怎么写。当然多写一个if-else比使用各种设计模式肯定来的更快速了,这也就导致项目代码慢慢变得臃肿,难以维护的主要原因。在有空闲时间的情况下就可以给以前的代码做一次手术了。先看本次未优化前的代码:
|
设计模式 前端开发
前端仔学学设计模式--单例模式
设计模式知识提取将分为N篇文章,本篇文章是个开篇文,后期会进行其他相关的同步(会就分享,不会就折腾),旨在提升技能,更好地享受敲键盘的快感~
前端仔学学设计模式--单例模式
|
设计模式 SQL 前端开发
面试官问,你在开发中有用过什么设计模式吗?我懵了
面试官问,你在开发中有用过什么设计模式吗?我懵了
292 0
面试官问,你在开发中有用过什么设计模式吗?我懵了
|
设计模式 缓存 Java
设计模式最佳套路3 —— 愉快地使用代理模式
代理模式(Proxy Pattern)即为某一个对象提供一个代理对象,由代理对象来接管被代理对象的各个方法的访问。
977 0
设计模式最佳套路3 —— 愉快地使用代理模式
|
新零售 设计模式 Java
设计模式最佳套路4 —— 愉快地使用模板模式
模板模式(Template Pattern) 又叫模板方法模式,其定义了操作的流程,并将流程中的某些步骤延迟到子类中进行实现,使得子类在不改变操作流程的前提下,即可重新定义该操作的某些特定步骤。例如做菜,操作流程一般为 “准备菜”->“放油”->“炒菜”->“调味”->“装盘”,但可能对于不同的菜要放不同类型的油,不同的菜调味方式也可能不一样。
设计模式最佳套路4 —— 愉快地使用模板模式