简单工厂VS工厂方法
简单工厂模式
背景需求:
用面向对象语言实现一个计算器控制台程序,要求输入两个数和运算符号,得到结果。
标准:
代码规范,通过封装、继承、多态把程序的耦合度降低,程序灵活,易于修改和复用。
主要类图:
1、加减乘除类继承Operation运算类
2、简单运算工厂类作为一个单独的类,用来创造实例。
代码部分如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace ConsoleApplication1
{class Program{static void Main(string[] args){try{Console.WriteLine("请输入数字A:");string strNumberA = Console.ReadLine();Console.WriteLine("请选择运算符号(+、-、*、/):");string strOperate = Console.ReadLine();Console.WriteLine("请输入数字B:");string strNumberB = Console.ReadLine();string strResult = "";strResult = Convert.ToString(Operation.GetResult(Convert.ToDouble(strNumberA), Convert.ToDouble(strNumberB), strOperate));Console.WriteLine("结果是:" + strResult);Console.ReadLine();}catch (Exception ex){Console.WriteLine("您输入有错:" + ex.Message);}}}//业务逻辑和界面逻辑分开//Operation运算类public class Operation{public static double GetResult(double numberA, double numberB, string operate){double result = 0d;switch (operate ){case "+":result =numberA +numberB;break;case "-":result =numberA -numberB;break;case "*":result =numberA*numberB;break;case "/":result =numberA/numberB;break;} return result;}}
}
运行结果:
其结构图为:
而类似的例子在工厂方法模式的结构图为
工厂方法模式
背景需求:雷锋依然在人间。
1、雷锋帮老人扫地、洗衣、买米等
//雷锋类class LeiFeng{public void Sweep(){Console.WriteLine ("扫地");}public void Wash(){ Console.WriteLine("洗衣");}public void BuyRice(){Console.WriteLine("买米");}}
2、三个学雷锋的大学生要代替他去做这些事情,并且大学生总要毕业的,这时候就要社区志愿者来帮忙干同样的事情了。
//学雷锋的大学生,继承“雷锋”class Undergraduate : LeiFeng{ }//社区志愿者class Volunteer : LeiFeng{ }
3、简单工厂类
//简单雷锋工厂类class SimpleFactory{public static LeiFeng CreateLeiFeng(string type){LeiFeng result = null;switch (type ){case "学雷锋的大学生":result =new Undergraduate ();break ;case "社区志愿者":result =new Volunteer ();break ;}return result ;}}
4、每次实例化的时候写出这个工厂的代码,为了避免重复,我们尝试用工厂方法模式写一遍。
//雷锋工厂interface IFactory{LeiFeng CreateLeiFeng();}//学雷锋的大学生工厂class UndergraduateFactory : IFactory{public LeiFeng CreateLeiFeng(){return new Undergraduate();}}//社区志愿者工厂class VolunteerFactory : IFactory{public LeiFeng CreateLeiFeng(){return new Volunteer();}}
5、客户端调用
static void Main(string[] args){//工厂方法模式IFactory factory = new UndergraduateFactory();LeiFeng student = factory.CreateLeiFeng();student.BuyRice();student.Sweep();student.Wash();}
运行结果:
简单工厂VS工厂方法相关推荐
- 设计模式:简单工厂、工厂方法、抽象工厂之小结与区别
简单工厂,工厂方法,抽象工厂都属于设计模式中的创建型模式.其主要功能都是帮助我们把对象的实例化部分抽取了出来,优化了系统的架构,并且增强了系统的扩展性. 本文是本人对这三种模式学习后的一个小结以及对他 ...
- Java设计模式之(工厂模式)--简单工厂模式--工厂方法模式--抽象工厂模式
工厂模式: 工厂模式可以分为三类: 1)简单工厂模式(Simple Factory) 2)工厂方法模式(Factory Method) 3)抽象工厂模式(Abstract Factory) 简单工厂模 ...
- 用C#(.NET Core) 实现简单工厂和工厂方法设计模式
本文源自深入浅出设计模式. 只不过我是使用C#/.NET Core实现的例子. 前言 当你看见new这个关键字的时候, 就应该想到它是具体的实现. 这就是一个具体的类, 为了更灵活, 我们应该使用的是 ...
- 简单工厂抽象工厂工厂方法_让工厂美丽
简单工厂抽象工厂工厂方法 每个名副其实的Java程序员都知道Factory Pattern . 这是一种便捷,标准化的方法,它通过教一个组件如何捕鱼而不是将它们交给它们来减少耦合. 但是,在使用大型系 ...
- getresourceasstream方法_【设计模式】第三篇:一篇搞定工厂模式【简单工厂、工厂方法模式、抽象工厂模式】...
文章系列目录(持续更新中): [设计模式]第一篇:概述.耦合.UML.七大原则,详细分析总结(基于Java) [设计模式]第二篇:单例模式的几种实现And反射对其的破坏 一 为什么要用工厂模式 之前讲 ...
- 设计模式(一)----简单工厂、工厂方法和抽象工厂区别
首先他们都属于创建型模式,除此之外还有建造者模式(如stringbuilder),单例模式. 简单工厂 简单工厂模式的工厂类一般是使用静态方法,通过接收的参数的不同来返回不同的对象实例. 不修改代码的 ...
- 【设计模式】简单工厂模式+工厂方法模式+抽象工厂模式
前提导论 故事 不采用工厂模式 简单工厂模式 工厂方法模式 故事 抽象工厂模式 故事结局 前提导论 为了学习设计模式时便于理解,我将用基于农夫和他的村子与森林为背景环境,讲一个故事时,阐述一个设计模式 ...
- 工厂模式(简单工厂,工厂方法,抽象工厂)
工厂顾名思义就是创建产品,工厂分为三种:简单工厂,工厂方法,抽象工厂.该模式用于封装和管理对象的创建,是一种创建型模式. 1)简单工厂 该模式通过向工厂传递类型来指定要创建的对象 提供一个方法,根据类 ...
- UML图解简单工厂模式工厂方法模式抽象工厂模式区别
简述 工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一: 工厂模式包含 简单工厂模式& 工厂方法模式& 抽象工厂模式这三种: 这三者主要区别在于工厂实现的 ...
- 简单工厂、工厂方法、抽象工厂
普通工厂产出是一个产品(实例),抽象工厂产出是一个抽象(接口).区别在于,若添加一个新的产品,前者是修改工厂,后者是创建新工厂(符合"闭合原则"). 1.简单工厂其实不是一个标准的 ...
最新文章
- 是时候开始使用JavaScript严格模式了怎样启用javascri
- MySQL数据库MyISAM存储引擎转为Innodb
- redis4.0.2集群搭建
- TOJ 4095: love168yk的选美大赛
- pythonos pathjson_Python Json数据文件操作原理解析
- nginx.conf删除与否网页都能访问(nginx没有生效)的问题
- SAP Spartacus store里引用的library是如何编译出来的
- java编译命令 Linux,通过命令行在linux中编译Java类
- Android小项目之--服务【Service】
- Oracle的分页实现
- redis入门——服务器篇
- bat 命令行执行 java(jar)获取返回值 【ERRORLEVEL、System.exit(code)】
- Display yuv formatted video by shader
- BZOJ_1003_[ZJOI2006]_物流运输_(动态规划+最短路)
- PUT 还是 POST ?
- SC;FC;LC;光纤接口介绍
- 在IntelliJ IDEA下编辑jspx文件(转)
- 案例分享:Qt modbus485调试工具(读写Byte、Int、DInt、Real、DReal)(当前v1.3.0)
- 2019,华为一号文
- (个人)太极拳学习系统创新实训第一周(一)