《大话设计模式》——读后感 (1)代码无错就是优?——简单工厂模式

本篇是我学习设计模式后的第一篇文章,由于本模式也比较简单,在此我就多啰嗦一下。

学习本模式之前请下看一下我的《大话设计模式铺垫》文章,然后回答思考如下问题:

1、UML类图看懂了吗?
2、java的3大特性真的懂了吗?知道为什么要封装、继承、多态了吗?

对于和我一样的菜鸟而言,我根本就不知道什么是设计模式,那怎么办?学呗。怎么样的学习设计模式呢?看UML类图,然后结合代码加以理解,废话不多刷,先上图

从图中我独处了如下信息:

1、运算类是个抽象类,而不是接口。(不懂就去看UML类图)

2、加、减、乘、除法类是具体的实现类

3、我看到了封装、继承、多态的影子了

按照简单工厂的UML类图,我的代码如下:

首先模拟抽象类(思考一下用接口行不行,个人喜欢剑走偏锋,我就要试试interface行不行)

package com.sjmx.slpFactory;

public interface Operation {
    public double getResult(double a,double b);
}

加法实现类:

package com.sjmx.slpFactory;

public class OperationAdd implements Operation {

    @Override
    public double getResult(double a, double b) {
        return a+b;
    }

}

减法类:

package com.sjmx.slpFactory;

public class OperationDelete implements Operation {

    @Override
    public double getResult(double a, double b) {
        return a-b;
    }

}

乘法类:

package com.sjmx.slpFactory;

public class OperationMulti implements Operation {

    @Override
    public double getResult(double a, double b) {
        return a*b;
    }

}

除法类:

package com.sjmx.slpFactory;

public class OperationDiv implements Operation {

    @Override
    public double getResult(double a, double b) {
        return b!=0?a/b:0;
    }

}

简单工厂类:

package com.sjmx.slpFactory;

public class Factory {

    public static Operation getInstance(String type){

        Operation o ;

        switch(type){
            case "+":
                o = new OperationAdd();
                break;
            case "-":
                o = new OperationDelete();
                break;
            case "*":
                o = new OperationMulti();
                break;
            case "/":
                o = new OperationDiv();
                break;
            default:
                o = null;
        }
        return o;

    }
}

客户端代码:

package com.sjmx.slpFactory;

public class Factory {

    public static Operation getInstance(String type){

        Operation o ;

        switch(type){
            case "+":
                o = new OperationAdd();
                break;
            case "-":
                o = new OperationDelete();
                break;
            case "*":
                o = new OperationMulti();
                break;
            case "/":
                o = new OperationDiv();
                break;
            default:
                o = null;
        }
        return o;

    }
}

运行结果:

简单工厂模式应用场景:

    感觉简单工厂模式多用于 解决对象的创建 问题。比如你写了一些类,但是到底创建哪一个类?实例化对象的时候会不会因为创建太多了弄混?这个时候就应该考虑用一个 单独的类来做这个创建实例的过程 这就是工厂!

在本模式中涉及到了3大特性了吗?    加、减、乘、除各自干各自的事情,互相不影响,我们理解为封装。而它们都有类似的方法名,因为它们和Operation接口中的方法名是一致的,这是继承的原因。最后我们在客户端中只需要执行Operation oper = Factory.getInstance("+")就知道具体要使用什么运算类了,因为我们把所有的逻辑都封装在Factory类里面了,而不管加、减、乘、除都只不过是Operation接口的具体实现类而已,此处就是利用多态,确保了客户端只需要知道有这么个Operation存在就可以了,根本不需要关心是哪个具体运算类在运行!
				
时间: 2025-01-14 15:40:38

《大话设计模式》——读后感 (1)代码无错就是优?——简单工厂模式的相关文章

代码无错就是优?——简单工厂模式

<大话设计模式>第一章关于设计一个计算器程序.看完第一章深深地感觉到我存在这样的问题:碰到问题就直觉地用计算机能够理解的逻辑来描述和表达待解决的问题及具体的求解过程.这样设计程序本身没有什么错误,但是程序不容易维护.不容易扩展.更不容易复用.从而达不到高质量代码的要求. 关于面向对象编程比较生动的例子:没有活字印刷术的三国时期,工匠从雕刻“喝酒唱歌,人生真爽”——“对酒当歌,人生真爽”——“对酒当歌,人生几何”.需求随时都在变,我们如何应对这种情况呢? 活字印刷术可以很好的解决这个问题,从“喝

设计模式(四):SIMPLE FACTORY简单工厂模式 -- 创建型模式

1.定义 简单工厂模式又称静态工厂方法模式.重命名上就可以看出这个模式一定很简单.它存在的目的很简单:定义一个用于创建对象的接口. 2.适用场景 如果一个客户要一款宝马车,一般的做法是客户去创建一款宝马车,然后拿来用.后来出现工业革命.用户不用去创建宝马车.因为客户有一个工厂来帮他创建宝马.想要什么车,这个工厂就可以建.比如想要320i系列车.工厂就创建这个系列的车.即工厂可以创建产品. 3.评价 优点: 工厂类是整个模式的关键.包含了必要的逻辑判断,根据外界给定的信息,决定究竟应该创建哪个具体

【Javascript设计模式】第二课 神奇的魔术师——简单工厂模式

所谓简单工厂模式就是由一个方法来决定到底要创建那个类的实例,而这些实例经常都拥有相同的接口. 简单工厂模式主要运用一下几种情况(添加个人理解) 1.对象的构建有规律性,大部分相同只有个别不同,重复代码多 2.需要依赖具体环境创建不同的实例 3.处理大量具有相同属性的小对象 具体我们来看一个小例子: 大家在开发过程中经常遇到登陆模块,首先看以下的的具体的需求: 1.用户在输入框中输入的内容不符合规范,需要定义一个提示框提示:"您输入的内容不符合规范,请重新输入" 2.用户登陆提示用户不存

痛定思痛后开始的设计模式(0)简单工厂模式

大三上学期结束了,所有科目的成绩都出了,拉稀的一塌糊涂,但我总觉得为时不晚,所以现在开始重新学习设计模式.Oracle.编译原理. 简单工厂模式 说实话其实很简单,就是当你实例化这个对象的时候,实例化的过程拿出来放到了工厂里面进行,你可以直接拿到这个对象但是你却看不到这个对象的实例过程和实例逻辑. 将你想要的对象名字或者对象特征传入工厂,工厂给你创建你要的对象. 下面是代码: 首先是基类: 1 public abstract class Car { 2 protected abstract vo

笔记十三:设计模式之简单工厂模式、工厂方法模式、抽象工厂模式

引言: 假设现在有一个超市(Market),超市销售饼干(Biscuit).水果(Fruit).饮料(Drink)三种食品. 按照常规,我们建立三个类:class Biscuit.class Fruit.class Drink. class Biscuit{ public: Biscuit(){} ~Biscuit(){} void Show(){ cout << "Hi,customers! I'm Biscuit!" << endl; } }; class

设计模式之简单工厂模式(创建型)

定义 简单工厂模式又称静态工厂模式.可以根据参数的不同返回不同类的实例.定义一个类来创建其它类的实例. 角色 简单工厂模式包含如下角色 Factory:工厂角色 Product:抽象产品角色 ConcreteProduct:具体产品角色 简单实例 public abstract class Produce{ public abstract void m1()'' } public class ConcreteProduct extends Produce{ public void m1(){}

大话设计模式_简单工厂模式(Java代码)

简单的描述:一个父类.多个子类,实例化那个子类由一个单独的工厂类来进行 图片摘自大话设计模式: 运算类: 1 package com.longsheng.simpleFactory; 2 3 public class Calculate { 4 5 private double firstNum; 6 private double secondNum; 7 8 public double getFirstNum() { 9 return firstNum; 10 } 11 12 public v

《大话设计模式》学习笔记系列--1. 简单工厂模式

简单工厂模式实现了一种"工厂"概念的面向对象设计模式,它可以在不指定对象具体类型的情况下创建对象.其实质是定义一个创建对象的接口,但让实现这个接口的类来决定实例化具体类.工厂方法让类的实例化推迟到子类中进行. 以书本上的计算器程序为例,其UML描述如下: 图中,AddOperator, SubtactOpertor继承算式基类Operator,而CreateOperator则是负责创建一个操作类,而不指明具体的子类类型. 下面,我们来看代码: 首先操作积累: /// <summa

大话设计模式之简单工厂模式

简单工厂模式 最近朋友推荐了一本书<大话设计模式>,此书刚刚到,博主也还没开始看,希望以博文的方式与大家一起分享,一起学习. 简单工厂模式,也就是说,到底要实列化谁,将来会不会增加实列化的对象,比如增加开根运算,这是很容易实列化的地方应该考虑用一个单独的类来做这个创造实列的过程,这就是工厂,来我们一起看看这个类如何写. 简单运算工厂类: import public public class OperationFactory { public static OperationFactory(st