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

1、简单工厂模式如图

代码:

缺点:简单工厂模式需要客户端认识两个类,Cash和CashFactory

优点:子类的实例化被工厂封装了起来,客户端看不到

2、策略模式如图

代码:

public class Context{
    Strategy strategy;
    public Context(Strategy strategy){
        this.strategy =  strategy;
    }
    public double getResult(double money){
        return strategy.acceptCash(money);
    }
}

缺点:客户端(测试端)完全暴露了实现的子类

优点:策略模式的优点是简化了单元测试,因为每一个算法都有自己的类,可以通过自己的接口进行单元测试

我们需要做的是把简单工厂模式和策略模式结合起来,做到效果的最优

优点:这样我们在客户端实例化的是Content的对象,调用的是Content的方法getResult这使得具体的收费算法彻底与客户端分离,连算法的父类Cash都不让客户端认识

时间: 2024-08-06 11:53:57

浅谈简单工厂模式和策略模式的相关文章

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

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

浅谈简单工厂,工厂方法,抽象工厂的使用

前言 这几天了解了工厂模式,自己也整理下思路,任何一种模式的出现都是为了让我们的程序有更好的可扩展性,工厂模式也不例外. 简单工厂 在实际的代码coding中我们在创建对象(也就是实例化一个类)的时候往往需要new class()这样来操作.举个例子: 这是项目结构 //这是一个中国人的类public class ChinesePepole { public void Show() { Console.WriteLine("I'm a {0}", this.GetType().Name

浅谈简单工厂与工厂方法

在园子混迹许久,每日看一些大神的佳作,深感受益匪浅,进而萌生了分享一些知识的想法.当然,作为一个屌丝程序员分享不了多么高大上的知识,只是把平时工作中积累的一些东西共享出来,希望大神们手下留情,不要拍的太狠.呵呵,闲言少叙,书归正传. 简单工厂和工厂方法   GOF创造了设计模式这个家族,为我们写出更面向对象的代码提供了便利.相对于这个家族几乎代代单传,工厂家族可谓是门丁兴旺,今天主要来体验下简单工厂和工厂方法.   这里要说一个题外话,简单工厂模式不属于GOF创造的23种设计模式,最多算一个临时

浅谈简单工厂,工厂方法,抽象工厂的区别和使用

工厂模式是分为三种,分别是简单工厂,工厂方法,抽象工厂.其中工厂方法和抽象工厂是GoF23种设计模式中的一种,而简单工厂则不是一种设计模式,更加可以理解的是一种编码时候预定俗称的一种习惯.那么,就在接下来三点中分别去分析理解工厂模式. 一 简单工厂:通过实例化一个工厂类,来获取对应的产品实例.我们不需要关注产品本身如何被创建的细节,只需要通过相应的工厂就可以获得相应的实例.简单工厂包括三种角色: 1.工厂:简单工厂模式的核心,它负责实现创建所有实例的内部逻辑.工厂类的创建产品类的方法可以被外界直

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

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

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

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

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

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

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

很久之前在学习c++的时候就听到老师说写代码要考虑重构,架构,在此期间学习到了一种简单工厂模式. 何为简单工厂模式呢?简单工厂模式又叫静态工厂方法模式(Static FactoryMethod Pattern),是通过专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类. 举个栗子,我们可能会遇到这类问题,假如需要一个软件,它可以计算各种图形的面积,使用简单工厂模式来构架的话就是通过创建一个工厂类,而程序运行过程中这些实例化这些具体的计算面积的算法类,然后主程序通过调用这些实例

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

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