工厂模式

工厂模式

邮差的信 提交于 2019-11-30 03:24:45
#工厂package com.spring.base; import java.io.IOException; import java.util.HashMap; import java.util.Map; import java.util.Properties; public class ServiceFactory { private static final String CONF_FILE_NAME="conf.properties"; private static Properties prop; private static Map<String,Object> beanContainer; //静态代码块作用:每次初始化这个类时只加载配置文件 static { try { beanContainer=new HashMap<>(); prop=new Properties(); prop.load(ServiceFactory.class.getClassLoader().getResourceAsStream(CONF_FILE_NAME)); } catch (IOException e) { // e.printStackTrace(); throw new IllegalArgumentException(e); } } public static <T> T

浅谈Factory工厂模式

霸气de小男生 提交于 2019-11-30 03:17:38
一、前言 前面我们说过模板方法被用在了工厂方法里面,为什么呢?工厂是制造产品的,需要按照一定的流程去创造产品,因此这一定的流程创造产品就是我们的模板了。工厂方法可以说用的很多,在我们的第一个设计模式,迭代器里面,我们其实就用到过,只不过我们不知道而已,下面我们先看一下工厂方法的本质,然后再逐一分析。 二、代码实例 package designMode.factory; public abstract class Factory { public abstract Product createProduct(String owner); public abstract void registerProduct(Product p); public abstract void getAllProductOwner(); public Product create(String owner){ Product p = createProduct(owner); registerProduct(p); return p; } } package designMode.factory; import java.util.ArrayList; import java.util.List; public class IDCardFactory extends Factory { List

设计模式之工厂模式

谁说我不能喝 提交于 2019-11-29 22:15:57
工厂模式是另一种非常常用的模式,正如其名字所示:确实是对象实例的生产工厂。某些意义上,工厂模式提供了通用的方法有助于我们去获取对象,而不需要关心其具体的内在的实现。/** * Factory claa[工厂模式] */interface SystemFactory{ public function createSystem($type);}class MySystemFactory implements SystemFactory{ //实现工厂方法 public function createSystem($type) { // TODO: Implement createSystem() method. switch ($type) { case 'Mac': return new MacSystem(); case 'Win': return new WinSystem(); case 'Linux': return new LinuxSystem(); } }}class System{}class WinSystem extends System{}class MacSystem extends System{}class LinuxSystem extends System{}$System_obj = new MySystemFactory();var_dump(

设计模式——工厂模式

亡梦爱人 提交于 2019-11-29 22:15:24
1:工厂模式:简单一句话,就是生产类的。 2:分类:简单工厂、工厂模式、抽象工厂 3:代码 简单工厂 //定义运动类接口public interface Sport { public String getName(); } //实现一个足球的类public class FootballSport implements Sport { @Override public String getName() { return "我的名字叫足球"; } } //实现一个篮球的类public class BasketballSport implements Sport { @Override public String getName() { return "我的名字叫篮球"; } } //测试简单工厂public class SimpleFactory { public static void main(String[] args) { String name ="basket"; Sport sport = null; if (name.equals("foot")){ sport = new FootballSport(); }else if (name.equals("basket")){ sport = new BasketballSport(); } if (sport!=null

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

血红的双手。 提交于 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

设计模式(一)--工厂模式

那年仲夏 提交于 2019-11-29 21:25:44
设计模式 - (一)工厂模式 简单工厂模式 工厂模式 抽象工厂模式 今天看到一个容易理解的工厂模式例子,把它搬过来了,供大家参考。 下面例子中鼠标,键盘,耳麦为产品,惠普,戴尔为工厂。 简单工厂模式 简单工厂模式不是 23 种里的一种,简而言之,就是有一个专门生产某个产品的类。 比如下图中的鼠标工厂,专业生产鼠标,给参数 0,生产戴尔鼠标,给参数 1,生产惠普鼠标。 工厂模式 工厂模式也就是鼠标工厂是个父类,有生产鼠标这个接口。 戴尔鼠标工厂,惠普鼠标工厂继承它,可以分别生产戴尔鼠标,惠普鼠标。 生产哪种鼠标不再由参数决定,而是创建鼠标工厂时,由戴尔鼠标工厂创建。 后续直接调用鼠标工厂.生产鼠标()即可 抽象工厂模式 抽象工厂模式也就是不仅生产鼠标,同时生产键盘。 也就是 PC 厂商是个父类,有生产鼠标,生产键盘两个接口。 戴尔工厂,惠普工厂继承它,可以分别生产戴尔鼠标+戴尔键盘,和惠普鼠标+惠普键盘。 创建工厂时,由戴尔工厂创建。 后续工厂.生产鼠标()则生产戴尔鼠标,工厂.生产键盘()则生产戴尔键盘。 假设我们增加耳麦这个产品,则首先我们需要增加耳麦这个父类,再加上戴尔耳麦,惠普耳麦这两个子类。 之后在PC厂商这个父类中,增加生产耳麦的接口。最后在戴尔工厂,惠普工厂这两个类中,分别实现生产戴尔耳麦,惠普耳麦的功能。 以上。 来源: https://blog.csdn.net

JavaScript 设计模式(工厂 构造函数 原型 组合 单例)

非 Y 不嫁゛ 提交于 2019-11-29 19:23:21
工厂模式 函数里面封装对象最后返回对象 对象都是object类型 解决了创建多个对象的问题。 function work ( name , sex ) { var obj = new Object ( ) ; //实例化 obj . name = name ; obj . sex = sex ; obj . sleep = function ( ) { return "睡觉" ; } return obj ; } var object = work ( "花生" , "男" ) ; console . log ( object ) ; 构造函数模式 没有显示创建的对象 没有返回语句 直接将属性赋给this对象。 function bullet ( ) { this . width = 20 ; this . height = 15 ; this . speed = 10 ; this . g = 9.8 ; this . flymove = function ( ) { } } var b = new bullet ( ) ; console . log ( b ) ; function person ( name , age , job ) { this . name = name ; this . age = age ; this . job = job ; this .

设计模式(python描述)

前提是你 提交于 2019-11-29 15:05:18
目录 一、创建型设计模式 二、结构型设计模式 三、行为型设计模式 一、创建型设计模式 1、简单工厂模式 内容: 不直接向高层类暴露对象创建的实现细节,而是通过一个工厂类来负责创建产品类的实例。 角色: 工厂角色(Creator) 抽象产品角色(Product) 具体产品角色(Concrete Product) python示例: from abc import ABCMeta, abstractmethod class Payment(metaclass=ABCMeta): """ 抽象产品角色 # 抽象类,必须子类必须实现这个方法。 """ @abstractmethod def pay(self, money): pass class Alipay(Payment): """ 具体产品角色 """ def __init__(self, huabei=False): self.huabei = huabei def pay(self, money): if slelf.huabei: print("花呗支付%d元" % money) else: print("支付宝支付%d元" % money) class WechatPay(Payment): def pay(self, money): print("微信支付%d元" % money) class PaymentFactory

设计模式—创建型模式

不问归期 提交于 2019-11-29 15:04:57
文章目录 创建型模式 1、工厂模式 1.1、简单工厂模式 1.2、工厂方法模式 1.3、抽象工厂模式 2、单例模式 2.1、懒汉单例模式 2.1.1、非线程安全的懒汉单例模式 2.1.2、线程安全的懒汉单例模式 2.1.3、返回一个reference指向local static对象(非线程安全) 2.2、饿汉单例模式 3、建造者模式 4、原型模式 创建型模式 创建型模式提供了一种在创建对象的同时隐藏创建逻辑的方式,而不是使用 new 运算符直接实例化对象。 优点:程序在判断针对某个给定实例需要创建哪些对象时更加灵活。 1、工厂模式 在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。工厂模式作为一种创建模式,一般在创建复杂对象时,考虑使用;在创建简单对象时,建议直接new完成一个实例对象的创建。 1.1、简单工厂模式 主要特点是需要在工厂类中做判断,从而创造相应的产品,当增加新产品时,需要修改工厂类。使用简单工厂模式,我们只需要知道具体的产品型号就可以创建一个产品。 缺点:工厂类集中了所有产品类的创建逻辑,如果产品量较大,会使得 工厂类变的非常臃肿 。 /* 1、创建一个 Shape 接口和实现 Shape 接口的实体类。 2、定义工厂类 ShapeFactory。 3、使用 ShapeFactory 来获取 Shape 对象

spring自定义bean工厂模式解耦

无人久伴 提交于 2019-11-29 09:37:55
在resources下创建bean.properties accountService=cn.flypig666.service.impl.AccountServiceImpl accountDao=cn.flypig666.dao.impl.AccountDaoImpl 创建工厂:BeanFactory.java 创建单例对象效果更好 创建Map<String,Object>类型的容器beans 1 //定义一个Properties对象 2 private static Properties props; 3 4 //定义一个Map,用于存放我们要创建的对象,称之为容器 5 private static Map<String,Object> beans; 6 7 //使用静态代码块为Properties对象赋值 8 static { 9 try { 10 //实例化对象 11 props = new Properties(); 12 //获取properties文件的流对象,创建在resources文件夹下的properties文件会成为类根路径下的文件,不用写包名 13 InputStream in = BeanFactory.class.getClassLoader().getResourceAsStream("bean.properties"); 14 props.load