工厂类

(二)工厂模式

橙三吉。 提交于 2019-12-02 00:24:53
(二)工厂模式 GOF工厂模式定义 :为创建对象定义一个接口,让子类决定实例化那个类,工厂方法让一个类的实例化延迟至子类。 工厂模式分类: (1)简单工厂(Simple Factory)模式,又称静态工厂方法模式(Static Factory Method Pattern)。 (2)工厂方法(Factory Method)模式,又称多态性工厂(Polymorphic Factory)模式或虚拟构造子(Virtual Constructor)模式; (3)抽象工厂(Abstract Factory)模式,又称工具箱(Kit 或Toolkit)模式。 1.3 在开源框架中的使用 举两个比较常见的例子(我暂时可以准确想到的,当然还有很多很多): (1) Spring中通过getBean("xxx")获取Bean;(2)Java消息服务JMS中(以消息队列ActiveMQ为例)关于消息队列ActiveMQ的使用可以查看:消息队列ActiveMQ的使用详解 // 1、创建一个连接工厂对象,需要指定服务的ip及端口。 ConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://192.168.25.155:61616"); // 2、使用工厂对象创建一个Connection对象。 Connection

设计模式之美—工厂方法模式

纵饮孤独 提交于 2019-12-01 12:44:22
工厂方法模式    简单工厂模式 有一个问题就是,类的创建依赖工厂类。   如果想要拓展程序,必须对工厂类进行修改,这违背了闭包原则,所以,从设计角度考虑,有一定的问题,如何解决?   就用到工厂方法模式,创建一个工厂接口和创建多个工厂实现类,这样一旦需要增加新的功能,直接增加新的工厂类就可以了,不需要修改之前的代码。      新建酒的接口: 1 public interface Liqueur { 2 public void taste();//酒味 3 }   新建工厂的接口: 1 public interface Make { 2 /** 3 * 造酒的接口,造不同的酒,返回不同的酒味 4 * @return Liqueur 5 */ 6 public Liqueur makeLiqueur(); 7 } 创建酒的实现类:   (1)闷倒驴味道 1 public class Mdl implements Liqueur { 2 @Override 3 public void taste() { 4 System.out.println("我是闷倒驴,辣的!"); 5 } 6 }   (2)跑舌头味道 1 public class Pst implements Liqueur { 2 @Override 3 public void taste() { 4 System.out

设计模式-工厂方法模式

自古美人都是妖i 提交于 2019-12-01 10:34:58
工厂方法模式:又称工厂模式,也叫虚拟构造器模式或者多态工厂模式,属于类创建型模式。 在这个模式中,有4个角色 1.抽象工厂 在抽象工厂类中,声明了工厂方法,用于返回一个产品。是整个模式的 核心 ,它与应用程序无关。任何在模式中创建对象的工厂类都必须实现该接口。 2.具体工厂 是抽象工厂类的子类,实现了父类中的工厂方法。由客户调用,返回具体产品。 3.抽象产品 抽象产品是定义产品的接口,是所有产品的共同父类或者接口。 4.具体产品 实现抽象产品接口,由 专门 的具体工厂创建。 一个具体产品只能由某一个具体工厂创建,一一对应。 优点:用户只需要关心所需产品的工厂,无需知道其他细节,添加时不需要改动原来的代码,只需要增加具体工厂和具体产品类。也体现了缺点:每多一个具体产品,需要多写一个具体产品类和一个具体工厂类。 举例: 有抽象产品类 电视机,具体产品 海尔电视机和海信电视机。 有抽象工厂类 生产电视机制造厂,具体工厂 海尔制造厂和海信制造厂。 package factory; public abstract class TV{ public abstract void play(); }//TV作为抽象产品类,可以是接口或者抽象类。包含了所有产品都具有的业务方法play() TV.java package factory; public interface TVFactory{

工厂模式

拈花ヽ惹草 提交于 2019-12-01 07:44:10
面向对象设计的基本原则 OCP(开闭原则) :一个软件的实体应当对扩展开放,对修改关闭。 DIP(依赖倒转原则):要针对接口编程,不要针对实现编程。 LoD(迪米特法则): 只与你直接的朋友通信,而避免和陌生人通信。 工厂模式核心本质: -实例化对象,用工厂方法代替new操作。 -将选择实现类,创建对象统一管理和控制,从而将调用者跟我们的实现类解耦。 工厂模式(实现创建者和调用者的分离)分为3大类 简单工厂模式 描述: 简单工厂模式是由一个工厂对象根据收到的消息决定要创建哪一个类的对象实例 使用场景 工厂类负责创建的对象比较少,客户只需要传入工厂类的参数,对于如何创建对象 (逻辑)不关心,简单工厂模式很容易违反高内聚,低耦合的原则,英雌一般只在很简单的情况下使用 优点: 工厂类中包含了必要的逻辑们根据客户需要的逻辑动态实例化相关的类 工厂方法模式 描述: 定义一个创建对象的工厂接口,让子类决定实例化哪一个类,将实际创建工作推迟到子类当中 使用场景: 1、日志记录器:记录可能记录到本地硬盘、系统事件、远程服务器等,用户可以选择记录日志到什么地方。 2、数据库访问,当用户不知道最后系统采用哪一类数据库,以及数据库可能有变化时。 3、设计一个连接服务器的框架,需要三个协议,"POP3"、"IMAP"、"HTTP",可以把这三个作为产品类,共同实现一个接口。

第九次作业

偶尔善良 提交于 2019-12-01 07:23:14
利用接口和接口回调,实现简单工厂模式,当输入不同的字符,代表相应图形时,利用工厂类获得图形对象,再计算以该图形为底的柱体体积。 Shape类(图形类) /**创建一个图形类接口,一个求面积抽象方法*/ package ccut.li;public interface Shape { abstract double getArea();} yuanxing类(圆形类) /**创建一个圆类继承shape接口,定义半径r,PI,圆的构造方法和重写求面积方法*/ package ccut.li;public class yuanxing implements Shape{ double r; final double PI=3.14; yuanxing(double r){ this.r=r; } public double getArea(){ return r*r*PI; }} zhengfangxing类(正方形类) /**创建一个正方形类继承shape接口,定义边长a,正方形构造方法和重写求面积方法*/ package ccut.li;public class zhengfangxing implements Shape{ double a; public double getArea(){ return a*a; } zhengfangxing(double a){ this.a

[go设计模式]简单工厂模式

送分小仙女□ 提交于 2019-12-01 07:13:24
优点 工厂类是整个模式的关键.包含了必要的逻辑判断,根据外界给定的信息,决定究竟应该创建哪个具体类的对象.通过使用工厂类,外界可以从直接创建具体产品对象的尴尬局面摆脱出来,仅仅需要负责“消费”对象就可以了。而不必管这些对象究竟如何创建及如何组织的.明确了各自的职责和权利,有利于整个软件体系结构的优化。 缺点 由于工厂类集中了所有实例的创建逻辑,违反了高内聚责任分配原则,将全部创建逻辑集中到了一个工厂类中;它所能创建的类只能是事先考虑到的,如果需要添加新的类,则就需要改变工厂类了。 当系统中的具体产品类不断增多时候,可能会出现要求工厂类根据不同条件创建不同实例的需求.这种对条件的判断和对具体产品类型的判断交错在一起,很难避免模块功能的蔓延,对系统的维护和扩展非常不利; 这些缺点在工厂方法模式中得到了一定的克服。 个人网易云课堂: https://m.study.163.com/provider/480000001930416/index.htm?share=2&shareId=480000001930416 package main import ( "fmt" ) type Operation interface { Exe(int, int) int } type OperationAdd struct{} type OperationSub struct{} type

设计模式-简单工厂模式

元气小坏坏 提交于 2019-11-30 22:44:18
开闭原则:一个软件实体应该对扩展开放,对修改关闭,也就是说在设计一个模块的时候,应当使这个模块可以在不被修改的前提下被扩展,即实现 在不修改源代码的情况下改变这个模块的行为。 创建型模式:将对象的 创建过程 和 使用过程分离,降低耦合,使得软件系统易于扩展。 简单工厂模式属于创建型模式。 通过一个例子(权限管理)理解简单工厂模式 1.客户端有很多人可以登录,身份不同,有员工、经理和管理者。这三者权限不同,但都是客户。所以先创建一个抽象类客户User,再让三个具体类去继承。 2.员工、经理和管理者称为具体类Employee、Manager、Administrator,有各自的方法。 3.客户端里实现主函数main,对象的创建必然是在主函数里。 4.不直接创建对象,通过工厂类UserFactory创建,返回的User对象。具体返回是创建三种具体类对象。 5.实际开发过程中,会有DAO层,获取账号密码,再通过数据库判断是什么账号,返回员工、经理或管理者的标志,再通过标志传入工厂类获取对象。 1 package 简单工厂模式; 2 3 public class Client { 4 5 public static void main(String[] args) { 6 try { 7 User user; 8 UserDAO userdao=new UserDAO(); 9 int

设计模式一:简单设计模式

孤街浪徒 提交于 2019-11-30 15:10:32
简单工厂模式 概念 简单工厂模式属于创建型模式,又叫做静态工厂方法(Static Factory Method)。简单工厂模式是由一个工厂对象决定创建哪一种产品类实例。在简单工厂模式中,可以根据参数的不同返回不同类的实例。简单工厂模式专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。简单工厂模式是工厂模式家族中最简单实用的模式,可以理解为不同工厂模式的一个特殊实现 值得注意的是,简单工厂模式并不属于GOF设计模式之一。但是他说抽象工厂模式,工厂方法模式的基础,并且有广泛得应用 模式结构 组成 从上图中可以看出,简单工厂模式由三部分组成:具体工厂、抽象产品和具体产品 : 工厂类(Creator):这是本模式的核心,含有一定的商业逻辑和判断逻辑。在java中,它往往由一个具体的类实现 抽象产品(AbstractProduct):它一般是具体产品继承的父类或者实现的接口。在Java中,由接口或者抽象类实现 具体产品(ConcreteProduct):工厂类所创建的对象就是此角色的实例。在java中 由一个具体的类实现 实例分析 需求:有苹果类和香蕉类,他们都有get方法,通过主函数对它们进行实例化,并调用get方法 方式一:最基本的实例化 Apple.java: public class Apple { /** * 采集苹果 */ public void get()

简单工厂

别来无恙 提交于 2019-11-30 04:33:19
定义:由一个工厂对象决定创建出哪一种产品类的实例 类型:创建型,但不属于GOF23种设计模式 工厂类负责创建的对象比较少 客户端(应用层)只知道传入工厂类的参数,对于如何创建对象,不关心 优点:只需传入一个正确参数,就可以获取你所需要的对象而无须知道其创建细节 缺点:工厂类的职责相对过重,增加新的产品,需要修改工厂类的判断逻辑,违背开闭原则 Calendar类 来源: https://my.oschina.net/u/3915790/blog/3108792

工厂模式,从第三方登录说起

血红的双手。 提交于 2019-11-29 22:14:39
现在的很多平台在登陆的时候,下面都会有一排选项,可以选择微信、QQ、微博账号等登陆,这些账号对平台来说都是第三方账号。第三方账号登陆是最近几年流行起来的,第三方账号登录一般都是基于 OAuth2.0 协议开发的。如果你不了解 OAuth2.0 协议,可以自行百度,也许会对你看这篇文章有所帮助。 现在由于公司要给平台引入流量,为了降低注册门槛,让更多的人来使用你们的平台,领导决定在你们的平台上接入第三方账号登陆功能。现阶段先接入微信、支付宝、QQ、GitHub 这四个第三方账号登陆。这个任务也顺利的落到你的头上,由于你了解 OAuth2.0 协议,你知道这个是一个固定的三段式操作,第一步获取 Authorization Code ,第二步获取 Access Token ,第三步调用信息接口,但是每个平台返回来的数据字段或者格式可能会不一样,所以你根据你的开发经验,为第三方账号登录模块抽取出来了一个 IdentityProvider 抽象类,该类主要有上面提到的三步需要的接口, IdentityProvider 类的代码如下: public abstract class IdentityProvider { // 获取Authorization Code abstract void authorizationCode(); // 获取 Access Token abstract