《大话设计模式》学习笔记(Java实现)——第1章 简单工厂模式

版权声明:本文为博主ExcelMann的原创文章,未经博主允许不得转载。

第1章 简单工厂模式

作者:ExcelMann,转载需注明。

前言部分的关键内容

设计的演变过程更重要:

《重构与模式》中有一句经典之语:“如果想成为一名更优秀的软件设计师,了解优秀软件设计的演变过程比学习优秀设计本身更有价值,因为设计的演变过程中蕴藏着大智慧。”

学习设计模式的重点是学习其中的设计思想:

其实重要的不是你将来会不会用到这些模式,而是通过这些模式让你找到“封装变化”、“对象间松散耦合”、“针对接口编程”的感觉,从而设计出易维护、易拓展、易复用、灵活性好的程序。

学习设计模式的境界:

在刚刚开始学习设计模式的时候,难免会出现过度设计或者使用模式不恰当的问题。如果开始遇到这个问题,只有不断地钻研各种设计模式之间的差异以及应用场景,最后达到无剑胜有剑的境界。(就像是诗人一样,一开始背诵各种诗词模板,后面就不会再按照某种模式去创作诗歌了)

正文

本章介绍的是【简单工厂模式】,要实现的需求是一个计算器及其界面代码。

关键知识

  1. 面向对象的三大特性:封装、继承、多态。
  2. 面向对象的好处:可复用、易维护、易拓展、灵活性高。
  3. 封装——实现了可复用;
  4. 继承和多态——实现了易维护、易拓展和灵活性高。
  5. 简单工厂模式,利用多态特性。

1.代码规范

首先提到了几个新手会出现的代码规范的问题。

初学者写的代码中通常有几个问题:

  1. 命名问题;(命名应该严格,并且有意义)
  2. 出现多个if语句的问题;(应该转为switch/if-else)
  3. 对于特殊情况的处理;(例如除法分母为0)

2.开始进入面向对象

初学者写代码常常会陷入面向过程的编程,只要实现了需求即可。但是往往会造成不可复用、不可维护、不可拓展以及不够灵活的问题。只有将代码从面向过程转为面向对象,才能避免以上的四个问题。

面向对象三大特性
封装、继承、多态

面向对象的好处:通过封装、继承、多态把程序的耦合性降低,开始用设计模式使得程序变得更加的灵活,容易维护而且可以复用。
例如,对于传统印刷术的问题就在于所有字都刻在同一个版面上,造成耦合性太高,所以出现了活字印刷,将各个字的印刷分离开来,降低耦合性。

3.开始封装代码——实现可复用,降低耦合性

如果要实现计算器及其界面的这个需求,就必须想明白,哪些代码是和界面无关,而只和计算器相关的。

对于这部分代码就应该封装起来,实现可复用(其他程序也可以直接用,而不需要重新写)。

简单地说,就是将业务逻辑界面逻辑分开来,让它们之间的耦合度降低。只有耦合度降低了,才有可能达到易维护和易拓展

所以有了以下的业务逻辑(计算器)代码:

public class Operation
{
	public static double getResult(double numberA, double numberB, String operate)
	{
		double result = 0;
		switch(operate){
			case "+":
				result = numberA + numberB;
				break;
			case "-":
			...
		}
		return result;
	}
}

4.开始利用继承——实现松耦合

对于上一节中的代码,还没能达到易拓展、易维护和灵活性高的功效。

例如:如果现在要增加一个新的运算符,那么你就得去找到这个类,然后去修改其中的代码。如果万一万一,你不小心修改了该类中的其他代码,就会导致后续的一系列bug出现。。。

所以,下面的重点是,将各个运算符分离开来,修改其中的一个运算符代码,不会影响另外的几个,增加新的运算符也不会影响原来存在的

利用继承后,实现了以上的需求,代码如下:

public abstract class Operation {

    private double numberA;
    private double numberB;

    // get和set方法

    public abstract double getResult();
}

public class OperationAdd extends Operation{
    public double getResult(){
        double result = getNumberA()+getNumberB();
        return result;
    }
}
// ...其他operation类

5.开始使用简单工厂模式——利用多态特性

工厂模式的作用:
到底要实例化哪个操作符类的对象,可以用一个单独的类来做这个创造实例的过程,这就是工厂(专门用于实例化对象)。

使用简单工厂模式,利用面向对象的第三个特性——多态。代码如下:

public class OperateFactory
{
	Operation operate = null;
	
	public Operation getOperate(String operate){
		switch(operate){
			case "+":
				operate = new OperationAdd();
				break;
			// ...其他运算符			
		}
		return operate;
	}
}

以上,就实现了业务逻辑和界面代码的解耦。对于上面实现的计算器代码,任何客户端都可以拿来使用,实现了可复用
而且,如果你想修改其中的运算符代码,例如相加,那么你只需要修改 OperationAdd类的代码即可;如果你想增加一个新的运算符,那么你只需要增加一个继承Operation的类,并且在工厂类中增加一个case分支即可。实现了易维护、易扩展和灵活性高

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值