工厂模式

设计模式之工厂模式

妖精的绣舞 提交于 2019-12-02 22:18:21
一、什么是工厂模式 实现了创建者和调用者分离,工厂模式分为简单工厂、工厂方法、抽象工厂模式 # 二、工厂模式好处 工厂模式是我们最常用的实例化对象模式了,是用工厂方法代替new操作的一种模式。 利用工厂模式可以降低程序的耦合性,为后期的维护修改提供了很大的便利。 将选择实现类、创建对象统一管理和控制。从而将调用者跟我们的实现类解耦。 三、工厂模式分类 1、简单工厂模式 简单工厂模式相当于是一个工厂中有各种产品,创建在一个类中,客户无需知道具体产品的名称,只需要知道产品类所对应的参数即可。但是工厂的职责过重,而且当类型过多时不利于系统的扩展维护。 public interface Car { public void run(); } public class AoDi implements Car { public void run() { System.out.println("我是奥迪汽车.."); } } public class JiLi implements Car { public void run() { System.out.println("我是吉利汽车..."); } } public class CarFactory { public static Car createCar(String name) { if (StringUtils.isEmpty(name

设计模式-三种工厂模式-(附Java源码)

匿名 (未验证) 提交于 2019-12-02 21:53:52
建议结合示例源码理解 简单工厂模式(Simple Factory Pattern):定义一个工厂类,它可以根据参数的不同返回不同类的实例,被创建的实例通常都具有共同的父类。因为在简单工厂模式中用于创建实例的方法是静态(static)方法,因此简单工厂模式又被称为静态工厂方法(Static Factory Method)模式,它属于类创建型模式 简单工厂模式的要点在于:当你需要什么,只需要传入一个参数,就可以获取你所需要的对象,而无须知道其创建细节 主要优点: 客户端免除直接创建对象,实现对象创建于使用的分离 客户端无需知道具体产品类的类名,只需要知道对应的参数即可 通过引入配置文件,可以在不修改客户端代码的情况下更换新的产品类 主要缺点: 由于产品类中集中了所有产品的创建逻辑,职责过重,一旦不能正常工作,整个系统都要收到影响 增加系统中类的个数,增加了系统的复杂度 系统拓展困难,一旦有新产品就不得不修改工厂逻辑,不利于拓展与维护 使用场景: 工厂类负责创建的对象比较少, 客户端只知道传入工厂类的参数,对于如何创建对象不关心 简单工厂模式最大的缺点是当有新产品要加入到系统中时,必须修改工厂类,需要在其中加入必要的业务逻辑,这违背了“开闭原则” 。 在工厂方法中,我们不在提供统一的工厂类来创建所有的产品对象,而是针对不同的产品提供不同的工厂, 一个用于创建对象的接口

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

匿名 (未验证) 提交于 2019-12-02 21:52:03
今天来讲一下如何通过策略模式和工厂方法来消除累赘的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 eatFruit

设计模式 工厂模式

末鹿安然 提交于 2019-12-02 17:51:21
将new操作单独封装,遇到new时,就要考虑是否该用工厂模式 示例 你去购买汉堡,直接点餐,取餐,没必要自己亲手做(这就是一个初始化实例的封装) 商店要‘封装’做汉堡的工作,做好直接给买者 class Product { constructor(name) { this.name = name; } init() { alert('init'); } fn1() { alert('fn1'); } fn2() { alert('fn2'); } } class Creator{ create(name){ return new Product(name); } } // 测试 let creator = new Creator(); let p = creator.create('p1'); p.init(); p.fn1(); 这个Creator就是个工厂,里面有create函数,工厂通过create函数创建product。这样通过create已经把真正的构造函数封装起来,外部只需要知道create能生成一个 实例就行 其他场景 jquery-$('div') $('div')和new $('div')。会发现前面的工厂使用方便,如果每次都要加个new会比较麻烦。jQuery的链式操作将称为噩梦。一旦jquey名字变化,将是灾难性的。 class jQuery{

工厂模式

我是研究僧i 提交于 2019-12-02 16:47:06
  工厂模式:定义一个创建对象的接口,让其子类自己决定实例化哪一个工厂类,工厂模式使其创建过程延迟到子类进行。工厂模式属于创建型模式,其主要解决的是计划在 不同条件下创建不同实例 时接口选择的问题。 实现:   1、创建接口 1 class IShape 2 { 3 public: 4 virtual void draw() = 0; 5 virtual ~IShape() {}; 6 };   2、创建接口实体类 1 class Rectangle :public IShape 2 { 3 virtual void draw(); 4 }; 5 6 class Square : public IShape 7 { 8 virtual void draw(); 9 }; 10 11 void Rectangle::draw() 12 { 13 cout << "this is Rectangle" << endl; 14 } 15 16 void Square::draw() 17 { 18 cout << "this is Square" << endl; 19 }   3、创建工厂类接口 1 class IShapeFactory 2 { 3 public: 4 virtual IShape* createShape() = 0; 5 virtual

Spring代理模式

久未见 提交于 2019-12-02 16:35:08
Java的三种代理模式 1.代理模式 代理(Proxy)是一种设计模式,提供了对目标对象另外的访问方式;即通过代理对象访问目标对象.这样做的好处是:可以在目标对象实现的基础上,增强额外的功能操作,即扩展目标对象的功能. 这里使用到编程中的一个思想:不要随意去修改别人已经写好的代码或者方法,如果需改修改,可以通过代理的方式来扩展该方法 举个例子来说明代理的作用:假设我们想邀请一位明星,那么并不是直接连接明星,而是联系明星的经纪人,来达到同样的目的.明星就是一个目标对象,他只要负责活动中的节目,而其他琐碎的事情就交给他的代理人(经纪人)来解决.这就是代理思想在现实中的一个例子 用图表示如下: 代理模式的关键点是:代理对象与目标对象.代理对象是对目标对象的扩展,并会调用目标对象 1.1.静态代理(类似于装饰者模式) 静态代理在使用时,需要定义接口或者父类,被代理对象与代理对象一起实现相同的接口或者是继承相同父类. 下面举个案例来解释: 模拟保存动作,定义一个保存动作的接口:IUserDao.java,然后目标对象实现这个接口的方法UserDao.java,此时如果使用静态代理方 式,就需要在代理对象(UserDaoProxy.java)中也实现IUserDao接口.调用的时候通过调用代理对象的方法来调用目标对象. 需要注意的是,代理对象与目标对象要实现相同的接口

mybatis中使用到的设计模式

时光怂恿深爱的人放手 提交于 2019-12-02 16:16:32
Spring中的用到的设计模式大全 spring中常用的设计模式达到九种,我们举例说明: 第一种:简单工厂 又叫做静态工厂方法(StaticFactory Method)模式,但不属于23种GOF设计模式之一。 简单工厂模式的实质是由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类。 spring中的BeanFactory就是简单工厂模式的体现,根据传入一个唯一的标识来获得bean对象,但是否是在传入参数后创建还是传入参数前创建这个要根据具体情况来定。如下配置,就是在 HelloItxxz 类中创建一个 itxxzBean。 <beans> <bean id="singletonBean" class="com.itxxz.HelloItxxz"> <constructor-arg> <value>Hello! 这是singletonBean!value> </constructor-arg> </ bean> <bean id="itxxzBean" class="com.itxxz.HelloItxxz" singleton="false"> <constructor-arg> <value>Hello! 这是itxxzBean! value> </constructor-arg> </bean> </beans> 第二种:工厂方法(Factory Method )

工厂方法设计模式

倖福魔咒の 提交于 2019-12-02 15:54:42
工厂方法设计模式 抽象工厂角色: 这是工厂方法模式的核心,它与应用程序无关。是具体工厂角色必须实现的接口或者必须继承的父类。在java中它由抽象类或者接口来实现。 具体工厂角色:它含有和具体业务逻辑有关的代码。由应用程序调用以创建对应的具体产品的对象。在java中它由具体的类来实现。 抽象产品角色:它是具体产品继承的父类或者是实现的接口。在java中一般有抽象类或者接口来实现。 具体产品角色:具体工厂角色所创建的对象就是此角色的实例。在java中由具体的类来实现。 下面以IE,火狐,谷歌浏览器为模型做简单的说明 (1)抽象产品角色 定义三种浏览器共同的特性 package factoryMethod; /** * 简单的模拟 WebDriver的几个功能来说明工厂模式问题 * Selenium的Jar中有此类,且方法远远多于此 * @author Administrator * */ public interface WebDriver { //打开页面 public void openURL(String prmUrl); //查找元素 public String findElement(String prmFindTyp); //关闭页面 public void closePage(); } (2)具体产品角色 谷歌等三种浏览器的具体产品实现 package

设计模式_1 工厂模式

懵懂的女人 提交于 2019-12-02 12:48:31
工厂模式 工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象 介绍 意图: 定义一个创建对象的接口,让其子类自己决定实例化哪一个工厂类,工厂模式使其创建过程延迟到子类进行。 主要解决: 主要解决接口选择的问题。 何时使用: 我们明确地计划不同条件下创建不同实例时。 如何解决: 让其子类实现工厂接口,返回的也是一个抽象的产品。 关键代码: 创建过程在其子类执行。 应用实例: 1、您需要一辆汽车,可以直接从工厂里面提货,而不用去管这辆汽车是怎么做出来的,以及这个汽车里面的具体实现。 2、Hibernate 换数据库只需换方言和驱动就可以。 优点: 1、一个调用者想创建一个对象,只要知道其名称就可以了。 2、扩展性高,如果想增加一个产品,只要扩展一个工厂类就可以。 3、屏蔽产品的具体实现,调用者只关心产品的接口。 缺点: 每次增加一个产品时,都需要增加一个具体类和对象实现工厂,使得系统中类的个数成倍增加,在一定程度上增加了系统的复杂度,同时也增加了系统具体类的依赖。这并不是什么好事。 使用场景: 1、日志记录器:记录可能记录到本地硬盘、系统事件、远程服务器等,用户可以选择记录日志到什么地方。

DDD领域驱动设计基本理论知识总结

南楼画角 提交于 2019-12-02 11:22:59
原文地址: https://www.cnblogs.com/netfocus/archive/2011/10/10/2204949.html 领域驱动设计之领域模型 加一个导航,关于如何设计聚合的详细思考,见 这篇 文章。 2004年Eric Evans 发表Domain-Driven Design –Tackling Complexity in the Heart of Software (领域驱动设计),简称Evans DDD。领域驱动设计分为两个阶段: 以一种领域专家、设计人员、开发人员都能理解的通用语言作为相互交流的工具,在交流的过程中发现领域概念,然后将这些概念设计成一个领域模型; 由领域模型驱动软件设计,用代码来实现该领域模型; 由此可见,领域驱动设计的核心是建立正确的领域模型。 为什么建立一个领域模型是重要的 领域驱动设计告诉我们,在通过软件实现一个业务系统时,建立一个领域模型是非常重要和必要的,因为领域模型具有以下特点: 领域模型是对具有某个边界的领域的一个抽象,反映了领域内用户业务需求的本质;领域模型是有边界的,只反应了我们在领域内所关注的部分; 领域模型只反映业务,和任何技术实现无关;领域模型不仅能反映领域中的一些实体概念,如货物,书本,应聘记录,地址,等;还能反映领域中的一些过程概念,如资金转账,等; 领域模型确保了我们的软件的业务逻辑都在一个模型中