工厂模式

(5)工厂方法模式 — Factory Method — 文物管理衙门 — 和申的为官经营之道第二部分

走远了吗. 提交于 2020-04-07 15:16:36
前言: 我也是初学者,希望大家能提出意见。另外转载请注明作者和出处,毕竟花了快一周的时间才完成。 且说和申的文物管理局办得红红火火,得到了乾隆皇帝的好评( 请看第一部分 ),但是仍然有一些美中不足的地方。 第一个问题就是: 和申每次需要文物,必须清楚地知道衙门里都有哪些文物,还要知道他们的名字,否则是得不到文物的。这点小事对于日理万机的军机大臣来说,实在是不值得的。 第二个问题就是: 大清律法有一条规定,一个衙门一旦设定并正常运转,其人员编制、机构设置、职责任务等等,都不能轻易变更,除非得到皇帝的特准;但是如果工作需要,大臣们可以设立新的衙门,不需要皇帝批准。 而和申的文物管理局每次要处理 新种类 的文物,就必须对机构人员重新设定一番,这就要向乾隆报批,这可不是什么好事。 题外话: 大家可能都很不理解,大清为什么会有这么一条奇怪的律法,且听我慢慢道来。有一天乾隆睡觉的时候做了一个梦,梦里有四个鬼叫做 Gof 什么的,和他交流治国之道,四个鬼就说了,我们这有一条治国方略,照着去做国家就可以强盛,具体内容就是上面的那个规定,用我们现代人的话来说,就是 衙门要尽量免于修改,而易于扩展 。这就是我国为什么公务员人数总是严重超标的原因呀。 为了应对这两个问题,和申上报乾隆,进行了机构改革,具体内容就是在文物管理局下面设立 青铜器司 、 瓷器司 、 水墨画司 等等等等,这样每次要处理 新种类

设计模式之工厂模式

筅森魡賤 提交于 2020-04-07 13:56:40
简单工厂不符合开闭原则,所以这里不把创建每个对象放在一个工厂里,而是把创建工厂抽象出来,每次创建一个具体对象由每个对象工厂自己常见,符合开闭原则。 1 #include<iostream> 2 using namespace std; 3 #include<string> 4 5 //简单工厂不符合开闭原则,所以这里不把创建每个水果对象放在一个工厂里,而是把创建工厂抽象出来,每次创建一个具体水果由每个对象工厂自己常见,达到开闭原则。 6 7 //抽象水果 8 class abstractFruit{ 9 public: 10 virtual void showName()=0; 11 }; 12 //苹果 13 class apple:public abstractFruit{ 14 public: 15 virtual void showName() 16 { 17 cout<<"apple"<<endl; 18 } 19 }; 20 //梨 21 class pear:public abstractFruit{ 22 public: 23 virtual void showName() 24 { 25 cout<<"pear"<<endl; 26 } 27 }; 28 //香蕉 29 class banana:public abstractFruit{ 30 public:

创建型模式:工厂方法

 ̄綄美尐妖づ 提交于 2020-04-06 07:06:28
个人博客原文 创建型模式:工厂方法 简介 姓名 :工厂方法 英文名 :Factory method Pattern 价值观 :扩展是我的专属 个人介绍 : Define an interface for creating an object,but let subclasses decide which class to instantiate.Factory Method lets a class defer instantiation to subclasses. (定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。) (来自《设计模式之禅》) 你要的故事 还记得上一篇 单例模式 中的故事么?小明开着汽车去旅游、去学校、去聚会。这一次还是延续小明的故事,一个故事能讲 2 个设计模式,不容易呀。。。(每次想故事都想破脑袋,每一篇文章至少有 3 个故事从脑子里闪过,但最终留下的只有一个适合,为了就是能比较清晰简单的说明设计模式中的关键要点。) 简单工厂 小明家里以前不算很富裕,但是还是有一个不错的车库,什么汽车、摩托车、自行车啥的都放在这个车库里。小明每次要出去,都会到车库里面挑合适的车出发。比如,小明最近期末考试了,骑摩托车去学校考试,考完试之后,小明就准备去旅游,这次决定自驾游,开着自己家的小汽车去。这个场景我们用代码描述下。

设计模式学习---工厂模式

 ̄綄美尐妖づ 提交于 2020-04-06 06:05:31
工厂模式:主要用于实例化对象,把实例化对象代码与使用对象代码分开, 目的是降低系统中代码耦合度,并且增强了系统的扩展性,如果实例化一个对象的过长很复杂,需要一定的代码量,并且多处使用就会出现大量重复代码,则可以把这些实例化对象的代码放到工厂管理,可以减少重复代码并且维护时候也相对简单很多 。工厂模式分为三种实现方式 ,就是 简单工厂模式,工厂方法模式和抽象工厂模式 简单工厂模式 : 先抽象一个接口,所有Bean都实现该接口 public interface Bean { void massage(); } 接着就是几个Bean:User,Role,Auth public class Role implements Bean{ public void massage() { System. out .println( "this is a role" ); } } public class Auth implements Bean{ public void massage() { System. out .println( "this is an auth" ); } } public class User implements Bean{ public void massage() { System. out .println( "this is an user" ); } }

设计模式之工厂模式

假装没事ソ 提交于 2020-04-05 22:59:56
工厂模式分三种: 简单工厂模式 (也叫静态工厂模式), 工厂方法模式 (也叫多形性工厂), 抽象工厂模式 (也叫工具箱)下面会一一举例。 一、概念 1、什么是工厂模式 这种类型的设计模式属于 创建型模式,它提供了一种创建对象的最佳方式 。 工厂模式关心的是最终产出(创建)的对象, 而不关心创建的过程 。 2、工厂模式的优点 工厂模式主要是为 创建对象提供过渡接口,以便将创建对象的具体过程屏蔽隔离起来,达到提高灵活性的目的。 同时会给你系统带来更大的可扩展性和尽量少的修改量。(下面第三点会举例说明) 3、什么情况使用工厂模式 这也是具体的说明工厂模式优点。我个人认为在任何需要 生成复杂对象 的地方,都可以考虑使用工厂模式。 我们以线程池的举例。 ThreadPoolExecutor类的四个构造方法。 public class ThreadPoolExecutor extends AbstractExecutorService { ..... public ThreadPoolExecutor( int corePoolSize, int maximumPoolSize, long keepAliveTime,TimeUnit unit, BlockingQueue <Runnable> workQueue); public ThreadPoolExecutor( int

工厂模式

邮差的信 提交于 2020-04-01 00:40:26
工厂模式 1.概念:    工厂方法 :以抽象产品类派生出多个具体产品类;一抽象工厂类派生出多个具体工厂类;每个具体工厂类只能创建你一个具体产品类的实例。   即定义一个创建对象的接口(即抽象工厂类),让其子类(具体工厂类)决定实例化哪一个类(具体产品类)." 一对一 "的关系    抽象工厂 :多个抽象产品类,派生出多个具体产品类;一个抽象工厂类,派生出多个具体工厂类;每个具体工厂类   可以创建多个具体产品类的实例。即提供一个创建一系列相关或相互依赖对象的接口,而无需指定他们的具体的类." 一对多 "的关系 2. UML 工厂方法: 抽象工厂: 3. 代码 工厂方法: 1 public interface Product 2 { 3 } 4 5 public interface Creator 6 { 7 public Product factory(); 8 } 9 10 public class ConcreteProduct1 implements Product 11 { 12 public ConcreteProduct1() 13 { 14 System.out.println("ConcreteProduct1被创建"); 15 } 16 } 17 18 public class ConcreteProduct2 implements Product 19 {

工厂模式

喜夏-厌秋 提交于 2020-03-31 11:13:21
工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。 工厂模式分为三种:普通工厂模式、静态工厂模式、抽象工厂模式。 使用场景:    当我们直接new一个对象比较麻烦时,比如构造方法传参数量太多;   再比如创建一个类A要先创建类B,这种使用new比较麻烦时就可以交给工厂去做,还减少了代码的重复。 1、普通工厂模式: 就是建立一个工厂类,对实现了同一接口的一些类进行实例的创建。首先看下关系图: 举例如下:(我们举一个发送邮件和短信的例子) 首先,创建二者的共同接口: public interface Sender { public void Send(); } 其次,创建实现类: public class MailSender implements Sender { @Override public void Send() { System.out.println("this is mailsender!"); } } public class SmsSender implements Sender { @Override public void Send() { System.out

Java设计模式 工厂模式概念解析

六眼飞鱼酱① 提交于 2020-03-29 17:22:32
定义:工厂模式专门负责将大量有共同接口的类实例化。工厂模式可以动态决定将哪一个类实例化,而不必事先知道每次要实例化哪一个类。 三种形态: 简单工厂模式:又称静态工厂方法 工厂方法模式:又称多态性工厂模式或虚拟构造子模式 抽象工厂模式:又称工具箱模式 简单工厂模式:专门定义一个类来负责其他类的实例,被创建的实例通常具有共同的父类或接口。 适用场景: 工厂类负责创建的对象比较少:由于创建的对象比较少,不会造成工厂方法中的业务逻辑太过复杂; 客户端只知道传入工厂类的参数,对于如何创建对象不关心:客户端既不需要关心创建细节,甚至连类名都不需要记住,只需要知道类型所对应的参数; 优点: 工厂类含有必要的逻辑判断,可以决定什么时候创建哪一个产品实例,客户端可以免除直接创建产品对象的责任,而仅仅“消费”产品:简单工厂模式通过这种做法实现了对责任的分割,它提供了专门的工厂类用于创建对象; 客户端无需知道所创建的具体产品类的类名,只需要知道具体产品类所对应的参数即可,对于一些复杂的类名,通过简单工厂模式可以减少使用者的记忆量; 通过引入配置文件,可以在不修改任何客户端代码的情况下更换和增加新的具体产品类,在一定程序上提高了系统的灵活性。 缺点: 由于工厂类集中了所有产品创建逻辑,一旦不能正常工作,整个系统都要受到影响; 使用简单工厂模式将会增加系统中类的个数,在一定程度上增加了系统的复杂度和理解难度

ativemq使用教程

邮差的信 提交于 2020-03-28 14:55:57
本文转自http://www.cnblogs.com/zhuxiaojie/p/5564187.html 目录: 一:JMQ的两种消息模式 1.1:点对点的消息模式 1.2:订阅模式 二:点对点的实现代码 2.1:点对点的发送端 2.2:点对点的接收端 三:订阅/发布模式的实现代码 3.1:订阅模式的发送端 3.2:订阅模式的接收端 四:发送消息的数据类型 4.1:传递javabean对象 4.2:发送文件 五:ActiveMQ的应用 5.1:保证消息的成功处理 5.2:避免消息队列的并发 5.2.1:主动接收队列消息 5.2.2:使用多个接收端 5.3:消息有效期的管理 5.4:过期消息,处理失败的消息如何处理 六:ActiveMQ的安全配置   6.1:管理后台的密码设置 6.2:生产消费者的连接密码 一:JMQ的两种消息模式 消息列队有两种消息模式,一种是点对点的消息模式,还有一种就是订阅的模式. 1.1:点对点的消息模式 点对点的模式主要建立在一个队列上面,当连接一个列队的时候,发送端不需要知道接收端是否正在接收,可以直接向ActiveMQ发送消息,发送的消息,将会先进入队列中,如果有接收端在监听,则会发向接收端,如果没有接收端接收,则会保存在activemq服务器,直到接收端接收消息,点对点的消息模式可以有多个发送端,多个接收端,但是一条消息,只会被一个接收端给接收到

工厂模式的三种实现,就这么简单!

一曲冷凌霜 提交于 2020-03-24 11:09:32
3 月,跳不动了?>>> 工厂模式 工厂模式是开发中常用的一种设计模式,每一种设计模式都会极大的解决程序设计方面的问题,工厂模式也是一样,本文将会用通俗的语言来解释什么是工厂模式?工厂模式的种类、代码示例、每种工厂模式的优缺点和工厂模式适用的场景。 为什么要是使用工厂模式? 首先我们用一个生动故事来描述下什么是工厂模式,这会让你更快的理解工厂模式,为后面理解的工厂模式的几种实现方式打下基础。 假如,你需要让公司开一个收入证明为自己贷款买房提供收入证明,一般开收入证明的过程是: 打印收入证明; 在收入证明上盖上公司的章; 贯穿整个过程,可以知道,你需要创建一个收入证明,并使用收入证明为贷款买房提供资料。这个过程中,有两个关键的行为:创建收入证明,使用收入证明。创建收入证明的过程中又分为两步:打印、盖章。不熟悉这个流程的同事在创建收入证明的时候,往往会遇到很多麻烦导致开收入证明频频受阻,于是公司决定把员工开收入证明这件事做个优化,以前需要两步做的事,现在只需要发一份邮件给财务部门,财务部门就会在下班之前就会把盖好章的收入证明送到工位,这就是生活中遇到的 工厂模式 。 说了这么多, 工厂模式 究竟解决了生活中的哪些问题呢? 在这个生活案例中,它让员工创建收入证明这件事情变得更加简单,员工不需要知道收入证明是怎么创建的,只需要发一份邮件给财务部门,财务部门就会帮助员工打印并盖章