工厂模式

23种设计模式

时光怂恿深爱的人放手 提交于 2019-11-29 06:18:50
目录 创建型 1. Factory Method (工厂方法) 2. Abstract Factory (抽象工厂) 3. Builder (建造者) 4. Prototype (原型) 5. Singleton (单例) 结构型 6. Adapter Class/Object (适配器) 7. Bridge (桥接) 8. Composite (组合) 9. Decorator (装饰) 10. Facade (外观) 11. Flyweight (享元) 12. Proxy (代理) 行为型 13. Interpreter (解释器) 14. Template Method (模板方法) 15. Chain of Responsibility (责任链) 16. Command (命令) 17. Iterator (迭代器) 18. Mediator (中介者) 19. Memento (备忘录) 20. Observer (观察者) 21. State (状态) 22. Strategy (策略) 23. Visitor (访问者) 创建型 1. Factory Method (工厂方法) 意图: 定义一个用于创建对象的接口,让子类决定实例化哪一个类。 Factory Method 使 一 个类的实例化延迟到其子类。 适用性: 当一个类不知道它所必须创建的对象的类的时候。

工厂模式

…衆ロ難τιáo~ 提交于 2019-11-29 01:35:50
1 namespace UnitTestProject1.BaseDesign 2 { 3 4 /// <summary> 5 /// 工厂方法模式要求:尽量使用抽象类或接口来定义就可以达到一个开闭原则 6 /// </summary> 7 [TestClass] 8 public class BaseDesign 9 { 10 [TestMethod] 11 public void TestMethod1() 12 { 13 GetAnimalEat(new DogFactoryFactory()); 14 15 GetAnimalEat(new PigFactoryFactory()); 16 17 //如果再增加一个AnimalEat不会对现有代码有改动 18 } 19 20 void GetAnimalEat(AnimalFactory fa) 21 { 22 Animal am = fa.GetAnimal(); 23 am.Eat(); 24 } 25 26 } 27 public abstract class Animal 28 { 29 public abstract void Eat(); 30 } 31 32 public class Dog : Animal 33 { 34 public override void Eat() 35 { 36 Console

策略模式+工厂方法消除if...else

核能气质少年 提交于 2019-11-29 00:17:42
今天来讲一下如何通过策略模式和工厂方法来消除累赘的if...else,具体什么是策略模式,大家可以自行百度学习,我就不再这里做过多的介绍了。 注意:如果业务场景简单,建议使用if...else,因为代码逻辑简单,便于理解 策略接口 Eat.java /** * 策略接口 * */ public interface Eat { public void eatFruit(String fruit); } 策略类 EatApple.java /** * 具体的策略类:吃苹果 */ public class EatApple implements Eat{ @Override public void eatFruit(String fruit) { System.out.println("吃苹果"); } } EatBanana.java /** * 具体的策略类:吃香蕉 */ public class EatBanana implements Eat { @Override public void eatFruit(String fruit) { System.out.println("吃香蕉"); } } EatPear.java /** * 具体的策略类:吃梨 */ public class EatPear implements Eat { @Override public void

设计模式学习笔记(二)-创建者模式(Creational Pattern)

ⅰ亾dé卋堺 提交于 2019-11-28 23:00:22
创建者模式(Creational Pattern) 简单工厂模式(Simple Factory) 又叫静态工厂方法模式,不属于23种GOF设计模式之一 Factory.creteObject(objectName); 工厂方法模式(工厂模式)(Factory Method) 一个类不知道它所需要的对象的类:客户端不需要知道具体产品类的类名,只需要知道所对应的工厂即可 一个类通过其子类来指定创建哪个对象 将创建对象的任务委托给多个工厂子类中的某一个,需要时再动态指定子类 FactoryA.creteObject(); FactoryB.creteObject(); 抽象工厂模式(Kit模式)(Abstract Factory) 提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们具体的类 (工厂模式只生成一个对象,抽象工厂模式生成一组相关的对象) 当抽象工厂模式中每一个具体工厂类只创建一个产品对象,也就是只存在一个产品等级结时,抽象工厂模式退化成工厂方法模式; 当工厂方法模式中抽象工厂与具体工厂合并,提供一个统一的工厂来创建产品对象,并将创建对象的工厂方法设计为静态方法时,工厂方法模式退化成简单工厂模式 interface PcFactory{ Mouse createMouse(); Keyboard createKeyboard(); } class HpFactory

java反射(二)--反射应用案例

走远了吗. 提交于 2019-11-28 20:21:34
一.反射实例化对象   经过一系列的分析之后发现虽然可以获取Class类的实例化对象,但是依然觉得这个对象的获取意义不是很大,因此可以通过以下几个案例去理解反射的核心意义 --反射实例化对象:获取Class对象之后最大的意义并不是在于只是一个对象的实例化操作形式,更重要的是Class类中提供有一个对象的反射实例化方法,在JDK1.9之前的实例化:public T newInstance() throw InstantiationException,IllegalAccessException,该方法代替了new 关键字的使用,但是在JDK1.9之后则发生了变化:class.getDeclaredConstructor().newInstance(); --范例:通过newInstance()方法实例化对象 1 package 反射.认识反射机制.entity; 2 3 /** 4 * @author : S K Y 5 * @version :0.0.1 6 */ 7 public class Person { 8 public Person() { //任何情况下只要实例化对象则一定要调用类中的构造方法 9 System.out.println("Person对象实例化了"); 10 } 11 12 @Override 13 public String toString() {

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

狂风中的少年 提交于 2019-11-28 20:11:40
现在的很多平台在登陆的时候,下面都会有一排选项,可以选择微信、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

[C++] 设计模式-几种工厂模式

做~自己de王妃 提交于 2019-11-28 20:09:22
Factory 工厂模式 简单工厂模式 工厂方法模式 抽象工厂模式 工厂模式 严格来说,简单工厂模式不属于GOF设计模式范围内,这里拿来用作比较学习。 简单工厂模式 简言之,简单工厂指的是,有一个工厂,可以生产不同的产品,产品有一个抽象类,不同的实际产品类实现抽象类。代码如下: # include <iostream> using namespace std ; // Simple Factory class Car { public : virtual void show ( ) = 0 ; } ; class Benz : public Car { public : void show ( ) { cout << "Benz" << endl ; } } ; class Bmw : public Car { public : void show ( ) { cout << "Bmw" << endl ; } } ; class Factory { public : enum CarBrand { BENZ , BMW } ; Car * CreateCar ( CarBrand type ) { Car * temp = nullptr ; switch ( type ) { case Factory :: BENZ : temp = new Benz ( ) ; break

工厂模式总结

爷,独闯天下 提交于 2019-11-28 16:37:30
1.简单工厂——一个工厂创建多类产品(对象) 简单工厂模式(SimpleFactory Pattern)是指由一个工厂对象决定创建出哪一种产品类的实例,但它不属于GOF,23种设计模式(参考资料:http://en.wikipedia.org/wiki/Design_Patterns#Patterns_by_Type)。简单工厂适用于工厂类负责创建的对象较少的场景,且客户端只需要传入工厂类的参数(类的名字,或者类的class对象),对于如何创建对象的逻辑不需要关心。以课程为例,首先创建接口及其具体的实现: 1 package com.gupaoedu.vip.pattern.factory; 2 3 public interface ICourse { 4 //录制课程 5 void record(); 6 } 1 package com.gupaoedu.vip.pattern.factory; 2 3 public class JavaCourse implements ICourse { 4 @Override 5 public void record() { 6 System.out.println("录制Java课程..."); 7 } 8 } 1 package com.gupaoedu.vip.pattern.factory; 2 3 public class

工厂模式

雨燕双飞 提交于 2019-11-28 13:04:08
说明:   Golang的结构体没有构造函数,通常可以使用工厂模式来解决这个问题。 看一个需求: 一个结构体的声明是这样的: package model type Student struct {   Name string... } 因为这里的Student 的首字母S是大写的,如果我们想在其它包创建Student的实例(比如main包),引入model包后,就可以直接创建Student结构体的变量(实例)。 但是问题来了,如果首字母是小写的,比如是 type student struct {...} 就不行了,怎么办---》工厂模式来解决。 工厂模式来解决问题: 使用工厂模式实现挎包创建结构体实例(变量)的案例: 1)如果model 包的 结构体变量首字母大写,引入后,直接使用,没有问题。 model包里的代码: package model //定义一个结构体 type Student struct {   Name string   Score float64 } main包里面的代码 package main import (   "fmt"   "chapter04/chapter08/model" ) func main() {   //创建一个Student实例   var stu = model.Student{     Name : "tom",    

二级小兵——工厂模式(Factory Method)

我只是一个虾纸丫 提交于 2019-11-28 10:17:19
前言   上一篇我们介绍了单例模式,今天给大家讲一个比较简单的模式—— 工厂模式(Factory Method ) ,工厂模式又是什么呢?顾名思义,工厂——生产制造东西的地方。那么应用在程序当中该如何使用、并且又起到什么效果呢?以至于为什么用工厂模式呢?   之前我们说的OCP原则(开放封闭原则),对扩展开放,对修改封闭这一原则。在工厂模式中有极好的体现,对对象及类进行极好的封装。使其减少代码之间的耦合性。更具有扩展性。 工厂模式介绍 一、 来由   在我们编程过程当中,总会面临一些类的创建以及对象的创建,但是由于需求而不断变动(增加或者修改),导致对象的变化。这时怎么处理这个问题呢? 工厂模式提供的一种封装机制,隔离出了那些易变动的对象。这个时候需求的变动不再影响之前的对象的变动了。 二、 意图   定义一个用于创建对象的接口,让子类决定实例化哪一个类。FactoryMethod使一个类的实例化延迟到其子类。 三、 案例图 工厂模式中由以下部分组成: (1) 、抽象工厂(Creator): 复制定义工厂所需的基本规则,其他任何具体工厂都得继承此抽象工厂 (2) 、具体工厂(Concrete _ Creator): 继承抽象工厂,实现其定义的方法,以此来创建具体的产品 (3) 、抽象产品(Product): 复制定义产品的基本方法及规则,所有具体产品都得基础此抽象产品类 (4)