编程学习之简单工厂模式与策略模式

很久之前在学习c++的时候就听到老师说写代码要考虑重构,架构,在此期间学习到了一种简单工厂模式。

何为简单工厂模式呢?简单工厂模式又叫静态工厂方法模式(Static FactoryMethod Pattern),是通过专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。

举个栗子,我们可能会遇到这类问题,假如需要一个软件,它可以计算各种图形的面积,使用简单工厂模式来构架的话就是通过创建一个工厂类,而程序运行过程中这些实例化这些具体的计算面积的算法类,然后主程序通过调用这些实例化类的方法来进行计算对应图形的面积。

而策略模式则是对算法或者是一系列同类方法的封装,同样以上例的问题,用策略模式来构建的话,就是将每一种计算图形面积的方法单独封装成类,当需要某种算法的时候,则直接通过使用参数找到对应算法类的计算方法得到计算结果。

第一次学习这2种设计模式的时候,总是将这2者弄混,因为都是用了多态,且有些时候代码中这2种设计模式成组合状态出现。

其实判断方法很简单:

假如使用了一个单独的类来负责某一些功能类的实例化,则是工厂模式,他返回的值是一个对象

如果每次运行都是通过直接功能类的方法得到对应的结果,则是策略模式,它返回的是功能方法计算运行的结果

如果有一个单独负责某一些功能类的实例化同时也负责运行这些实例化出的功能类的方法并返回结果,则是工厂模式与策略模式的组合。

我有些懒所以暂时就不附图了,但是相关的设计模式样例代码和图片我以后都会放出来供大家下载学习。

为什么我记得之前直接ctrl+c和ctrl+v就可以加图片啊,现在不会加图片了,宝宝心里苦T^T

时间: 2024-10-12 21:22:01

编程学习之简单工厂模式与策略模式的相关文章

二、使用简单工厂来改进策略模式

策略模式的使用,把一系列算法进行了封装,只需要通过配置不同的算法,即可以实现算法的自由切换.具体内容参考第一篇:http://www.cnblogs.com/lay2017/p/7570041.html 但是,由于有不同的策略,那么我们就需要在使用的时候进行策略的选择,例如: String strategyName = "strategy1"; Strategy strategy = null; switch(strategyName){ case "strategy1&qu

【设计模式】简单工厂模式与策略模式

[前言]今天再次把<大话设计模式>一书拿出来翻了一下,对于前面一节初探中讲诉的简单工厂模式和策略模式,有了更好的理解.按照习惯,还是继续梳理梳理. [简单工厂模式]:封装(数据+算法) 简单工厂模式的特点: 每一个子类最好能做到职责单一,将每一个需要涉及的数据和算法,封装成一个独立的类. 工厂模式中的工厂类其实起到了一个调度者的角色: 2.1 工厂类可以达到将实现具体逻辑的子类隐藏的效果,只需要将自己暴露调用实例化的接口,根据工厂类提供的对外方法,在内部实现逻辑判断,并最后实例化具体的子类对象

简单工厂模式和策略模式的区别与结合

前言: 简单工厂模式和策略模式是大部分程序员,在学习设计模式时接触得最早,或在工作实践中也是用得相对比较多的两个设计模式. 一个是创建型,另一个是行为型,然而两种不同类型的模式,在某些地方也有一丝的相似之处,同时在某种场景下结合使用,能起到特别好的效果. 问题: 我觉得简单工厂模式和策略模式很相似.怎么相似?都是三个业务子类继承抽象父类,通过传入参数到容器类(工厂模式的factory类,策略模式的Content类),选择对应的类进行行为操作. 其实,UML图的确从外形上看没多大区别,但是,本质却

浅谈简单工厂模式和策略模式

1.简单工厂模式如图 代码: 缺点:简单工厂模式需要客户端认识两个类,Cash和CashFactory 优点:子类的实例化被工厂封装了起来,客户端看不到 2.策略模式如图 代码: public class Context{ Strategy strategy; public Context(Strategy strategy){ this.strategy = strategy; } public double getResult(double money){ return strategy.a

设计模式之_简单工厂模式、工厂方法模式、抽象工厂模式 、策略模式、策略与工厂的区别(转)

一.前言 话说十年前,有一个爆发户,他家有三辆汽车(Benz(奔驰).Bmw(宝马).Audi(奥迪)),还雇了司机为他开车.不过,爆发户坐车时总是这样:上Benz车后跟司机说“开奔驰车!”,坐上Bmw后他说“开宝马车!”,坐上 Audi后他说“开奥迪车!”.你一定说:这人有病!直接说开车不就行了?!而当把这个爆发户的行为放到我们程序语言中来,我们发现C语言一直是通过这种方式来坐车的 幸运的是这种有病的现象在OO语言中可以避免了.下面以Java语言为基础来引入我们本文的主题:工厂模式! 二.简介

简单工厂模式和策略模式的区别

直接上代码: 简单工厂模式: ------------------------------一个抽象类   -------------------------- abstract class AbsClass { //抽象方法:提供一些列的算法操作 public abstract void acceptCash(string org); } ------------------------------2个实现类   -------------------------- //继承自抽象类 class

Java研究之学习设计模式-简单工厂模式详解

 简介: 从设计模式的类型上来说,简单工厂模式是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式,但不属于23种GOF设计模式之一.简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例. 类图: 从UML类图中,可以看出,简单工厂模式的意思,就是把一个类内部,需要生成的部分,提取出来,变为一个工厂,通过工厂来new对象. 假设我们要吃苹果了,我们可以在代码中new一个苹果出来:当我们需要吃香蕉了,我们在代码中new一个香蕉出来.这种做法你会不会觉得麻烦

设计模式学习(二)-简单工厂模式

---恢复内容开始--- 简单工厂设计模式 简单工厂模式定义: 简单工厂设计模式又称为静态工厂方法(Static Factory Method)模式,它属于类创建型模式.在简单工厂模式中,可以根据参数的不同返回不同类的实例.简单工厂模式专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类. 简单工厂主要分为如下几个角色 抽象产品(abstract product):为所有具体产品的抽象表现,一般为抽象类 具体产品(product):为抽象产品的具体实现 生成产品工厂(facto

工厂模式与策略模式之区别

设计模式有很多种,其中功能相似的很多,但是为什么还要分这么多种名字,查阅资料,我觉得下面的解释最为合理:用途不一样,名字就有区别,一把斧头用来砍人就叫凶器,用来砍柴就叫伐木斧,用来劈门就叫消防斧,这些模式的名字都是根据具体使用时的场景,联系了现实里某样东西或某种习惯而取得,所以很相似的模式行为有不同叫法. 今天我们就来研究一些工厂模式与策略模式的一些区别: 工厂模式是创建型模式,适应对象的变化. 策略模式是行为性模式,适应行为的变化 工厂模式封装对象,实例化对象后调用的时候要知道具体的方法,策略