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

老生长谈的两个设计模式了,这里把这两个设计模式对比着来总结一下。

什么是简单工厂模式?

简单工厂模式:根据传入工厂类的参数动态决定要创建哪一个产品类的实例。

UML图如下(以实现一个计算器为例):

简单工厂模式的Java代码实现如下:

 1 package designPattern;
 2 /**
 3  * 简单工厂模式
 4  * @author yiRain
 5  *
 6  */
 7 public class SimpleFactory {
 8
 9     public static void main(String[] args){
10
11         double numberA = 6,numberB = 2;
12
13         FactoryOperation factoryOperation = new FactoryOperation();
14         Operation add = factoryOperation.CreateOperate(‘+‘);
15         double addResult = add.GetResult(numberA, numberB);
16
17         Operation sub = factoryOperation.CreateOperate(‘-‘);
18         double subResult = sub.GetResult(numberA, numberB);
19
20         System.out.println("addResult="+addResult+",subResult="+subResult);
21     }
22 }
23
24 /**
25  *
26  * 运算类
27  *
28  */
29 abstract class Operation{
30     public double numberA, numberB;
31     public abstract double GetResult(double numberA,double numberB);
32 }
33
34 /**
35  *
36  * 加法类
37  *
38  */
39 class addOperation extends Operation{
40
41     @Override
42     public double GetResult(double numberA, double numberB) {
43         // TODO Auto-generated method stub
44         return numberA+numberB;
45     }
46
47 }
48
49 /**
50  *
51  * 减法类
52  *
53  */
54 class subOperation extends Operation{
55
56     @Override
57     public double GetResult(double numberA, double numberB) {
58         // TODO Auto-generated method stub
59         return numberA-numberB;
60     }
61
62 }
63
64 /**
65  *
66  * 工厂类
67  *
68  */
69 class FactoryOperation{
70     public Operation CreateOperate(char type){
71         switch (type) {
72         case ‘+‘:
73             Operation add = new addOperation();
74             return add;
75         case ‘-‘:
76             Operation sub = new subOperation();
77             return sub;
78         default:
79             return null;
80         }
81     }
82 }

原文地址:https://www.cnblogs.com/yiRain1992/p/8372474.html

时间: 2024-10-11 17:44:50

设计模式学习笔记(二)--简单工厂模式和工厂模式的相关文章

nodejs学习笔记<二>简单的node服务器

在环境搭建好后,就可以开始动手架设(node驱动)一个简单的web服务器. 首先,nodejs还是用js编写.先来看一段node官网上的实例代码. var http = require('http'); http.createServer(function(req,res){ res.writeHead(200,{'Content-Type':'text/plain'}); res.end('Holle,nodejs'); }).listen(8080,'127.0.0.1'); console

request对象的增强 装饰设计模式学习笔记二

Servlet API 中提供了一个request对象的Decorator设计模式的默认实现类HttpServletRequestWrapper , (HttpServletRequestWrapper 类实现了request 接口中的所有方法,但这些方法的内部实现都是仅仅调用了一下所包装的的 request 对象的对应方法)以避免用户在对request对象进行增强时需要实现request接口中的所有方法 使用Decorator模式包装request对象,完全解决get.post请求方式下的乱码

redis 学习笔记二 (简单动态字符串)

redis的基本数据结构是动态数组 一.c语言动态数组 先看下一般的动态数组结构 struct MyData { int nLen; char data[0]; }; 这是个广泛使用的常见技巧,常用来构成缓冲区.比起指针,用空数组有这样的优势: 1.不需要初始化,数组名直接就是所在的偏移   2.不占任何空间,指针需要占用int长度空间,空数组不占任何空间.  这个数组不占用任何内存,意味着这样的结构节省空间: 该数组的内存地址就和他后面的元素的地址相同,意味着无需初始化,数组名就是后面元素的地

rabbitMQ学习笔记(二) 简单的发送与接收消息 HelloWorld

首先要下载rabbitmq的javaClient库,然后加入到项目中,下载地址为:http://www.rabbitmq.com/releases/rabbitmq-java-client/v3.1.5/rabbitmq-java-client-bin-3.1.5.zip 1.发送消息 发送消息首先要获取与rabbitmq-server的连接,然后从渠道(chann)中指定的queue发送消息 , 不能定义两个queue名字相同,但属性不同 示例: Sender01.java 1 package

java/android 设计模式学习笔记(4)---抽象工厂模式

再来介绍一下抽象工厂模式(Abstact Factory Pattern),也是创建型模式之一,上篇博客主要介绍了工厂方法模式.抽象工厂模式和工厂方法模式稍有区别.工厂方法模式中工厂类生产出来的产品都是具体的,也就是说每个工厂都会生产某一种具体的产品,但是如果工厂类中所生产出来的产品是多种多样的,工厂方法模式也就不再适用了,就要使用抽象工厂模式了. 抽象工厂模式的起源或者最早的应用,是对不同操作系统的图形化解决方案,比如在不同操作系统中的按钮和文字框的不同处理,展示效果也不一样,对于每一个操作系

java/android 设计模式学习笔记(3)---工厂方法模式

这篇来介绍一下工厂方法模式(Factory Method Pattern),在实际开发过程中我们都习惯于直接使用 new 关键字用来创建一个对象,可是有时候对象的创造需要一系列的步骤:你可能需要计算或取得对象的初始设置:选择生成哪个子对象实例:或在生成你需要的对象之前必须先生成一些辅助功能的对象,这个时候就需要了解该对象创建的细节,也就是说使用的地方与该对象的实现耦合在了一起,不利于扩展,为了解决这个问题就需要用到我们的工厂方法模式,它适合那些创建复杂的对象的场景,工厂方法模式也是一个使用频率很

大话设计模式读书笔记1——简单工厂模式

最近几日,重温了一下<大话设计模式>这本书,当时读的仓促,有很多没有注意的地方,现在仔细翻看起来,发现这值得细细品味的一本书!! 好东西就要记下来!!! 第一章笔记:从一个简单的计算器程序来看简单工厂模式. 变化的地方就要封装,用一个单独的类来做创造实例的过程这就是工厂. UML图: /// <summary> /// 运算类 /// </summary> public class Operation { public double Number1 { get; set

java/android 设计模式学习笔记(14)---外观模式

这篇博客来介绍外观模式(Facade Pattern),外观模式也称为门面模式,它在开发过程中运用频率非常高,尤其是第三方 SDK 基本很大概率都会使用外观模式.通过一个外观类使得整个子系统只有一个统一的高层的接口,这样能够降低用户的使用成本,也对用户屏蔽了很多实现细节.当然,在我们的开发过程中,外观模式也是我们封装 API 的常用手段,例如网络模块.ImageLoader 模块等.其实我们在开发过程中可能已经使用过很多次外观模式,只是没有从理论层面去了解它. 转载请注明出处:http://bl

java/android 设计模式学习笔记(10)---建造者模式

这篇博客我们来介绍一下建造者模式(Builder Pattern),建造者模式又被称为生成器模式,是创造性模式之一,与工厂方法模式和抽象工厂模式不同,后两者的目的是为了实现多态性,而 Builder 模式的目的则是为了将对象的构建与展示分离.Builder 模式是一步一步创建一个复杂对象的创建型模式,它允许用户在不知道内部构建细节的情况下,可以更精细地控制对象的构造流程.一个复杂的对象有大量的组成部分,比如汽车它有车轮.方向盘.发动机.以及各种各样的小零件,要将这些部件装配成一辆汽车,这个装配过

java/android 设计模式学习笔记(13)---享元模式

这篇我们来介绍一下享元模式(Flyweight Pattern),Flyweight 代表轻量级的意思,享元模式是对象池的一种实现.享元模式用来尽可能减少内存使用量,它适合用于可能存在大量重复对象的场景,缓存可共享的对象,来达到对象共享和避免创建过多对象的效果,这样一来就可以提升性能,避免内存移除和频繁 GC 等. 享元模式的一个经典使用案例是文本系统中图形显示所用的数据结构,一个文本系统能够显示的字符种类就是那么几十上百个,那么就定义这么些基础字符对象,存储每个字符的显示外形和其他的格式化数据