简单工厂模式和工厂方法模式

工厂模式核心:分工

简单工厂模式不符合OCP(Open-Closed Princinple)原则,扩展时需要更改原代码

工厂方法模式增加了类复杂度代码复杂度等,所以一般使用简单工厂模式

普通代码

public interface Car {
  void run();
}

public class Audi implements Car{
 @Override
 public void run() {
   System.out.println("奥迪在奔跑!!!");
 }
}
public class Bmw implements Car {
 @Override
 public void run() {
   System.out.println("BMW在奔跑!!!");
 }
}
public class Demo01 {
  public static void main(String[] args) {
   Car c1=new Audi();
   Car c2=new Bmw();
   
   c1.run();
   c2.run();
}
 

简单工厂模式

public interface Car {
  void run();
}

public class Audi implements Car{
 @Override
 public void run() {
   System.out.println("奥迪在奔跑!!!");
 }
}
public class Bmw implements Car {
 @Override
 public void run() {
   System.out.println("BMW在奔跑!!!");
 }
}
/**
 * 简单工厂模式
 * 破坏了OCP原则修改时需要改代码
 * @author 小帆敲代码
 *
 */
public class CarFactory {
  public static Car getCar(String type) {
   if(type.equals("奥迪")) {
    return new Audi();
   }else if(type.equals("宝马")) {
    return new Bmw();
   }else {
    return null;
   }
  }
}
public class Demo02 {
  public static void main(String[] args) {
   Car c1=CarFactory.getCar("宝马");
   Car c2=CarFactory.getCar("奥迪");
   
   c1.run();
   c2.run();
}
工厂方法模式
public interface Car {
  void run();
}
public class Bmw implements Car {
 @Override
 public void run() {
   System.out.println("BMW在奔跑!!!");
 }
}
public class Audi implements Car{
 @Override
 public void run() {
   System.out.println("奥迪在奔跑!!!");
 }
}
public interface CarFactory {
  Car getCar();
}
public class AudiFactory implements CarFactory{
 @Override
 public Car getCar() {
  return new Audi();
 }
}
public class BmwFactory implements CarFactory{
 @Override
 public Car getCar() {
  return new Bmw();
 } 
}
public class Client {
  public static void main(String[] args) {
   Car c1=new AudiFactory().getCar();
   Car c2=new BmwFactory().getCar();
   
   c1.run();
   c2.run();
  }
}

设计模式GOF23之工厂模式01的更多相关文章

  1. 乐在其中设计模式(C#) - 抽象工厂模式(Abstract Factory Pattern)

    原文:乐在其中设计模式(C#) - 抽象工厂模式(Abstract Factory Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 抽象工厂模式(Abstract Factor ...

  2. 桥接模式及C++实现 C++设计模式-AbstractFactory抽象工厂模式

    桥接模式及C++实现 桥接模式 先说说桥接模式的定义:将抽象化(Abstraction)与实现化(Implementation)分离,使得二者可以独立地变化. 桥接模式号称设计模式中最难理解的模式之一 ...

  3. C#设计模式(2)-简单工厂模式

    引言 上一遍中介绍了设计模式中的单例模式-C#设计模式(1)-单例模式,本篇将介绍简单工厂模式,也是比较容易理解的一种模式: 简单工厂模式简介 什么是简单工厂模式? 定义一个工厂类,它可以根据参数的不 ...

  4. java设计模式---三种工厂模式

    工厂模式提供创建对象的接口. 工厂模式分为三类:简单工厂模式(Simple Factory), 工厂方法模式(Factory Method)和抽象工厂模式(Abstract Factory).GOF在 ...

  5. Java进阶篇设计模式之二 ----- 工厂模式

    前言 在上一篇中我们学习了单例模式,介绍了单例模式创建的几种方法以及最优的方法.本篇则介绍设计模式中的工厂模式,主要分为简单工厂模式.工厂方法和抽象工厂模式. 简单工厂模式 简单工厂模式是属于创建型模 ...

  6. Java设计模式之【工厂模式】(简单工厂模式,工厂方法模式,抽象工厂模式)

    Java设计模式之[工厂模式](简单工厂模式,工厂方法模式,抽象工厂模式) 工厂模式出现的原因 在java中,创建一个对象最简单的方法就是使用new关键字.但在一些复杂的业务逻辑中,创建一个对象不只需 ...

  7. C#设计模式(2)——简单工厂模式(转)

    C#设计模式(2)——简单工厂模式   一.引言 这个系列也是自己对设计模式的一些学习笔记,希望对一些初学设计模式的人有所帮助的,在上一个专题中介绍了单例模式,在这个专题中继续为大家介绍一个比较容易理 ...

  8. Java设计模式之二 ----- 工厂模式

    在上一篇中我们学习了单例模式,介绍了单例模式创建的几种方法以及最优的方法.本篇则介绍设计模式中的工厂模式,主要分为简单工厂模式.工厂方法和抽象工厂模式. 简单工厂模式 简单工厂模式是属于创建型模式,又 ...

  9. Java 设计模式之抽象工厂模式(三)

    原文地址:Java 设计模式之抽象工厂模式(三) 博客地址:http://www.extlight.com 一.前言 上篇文章 <Java 设计模式之工厂模式(二)>,介绍了简单工厂模式和 ...

随机推荐

  1. java面试题(一年工作经验)的心得

    看面试题 正常人第一步肯定都会看面试题,我也不例外,在看的过程中,我发现有些文章写的不错,对我帮助不小值得推荐,如下: Java面试题全集(上) 很多基础的东西,建议先看. 各大公司Java后端开发面 ...

  2. 刷题记录:[V&N2020 公开赛]TimeTravel

    题目复现链接:https://buuoj.cn/challenges 参考链接:2020 年 V&N 内部考核赛 WriteUp V&N公开赛2020 writeup httpoxy ...

  3. shift后门

    shift快捷 Windows的粘滞键------C:\windows\system32\sethc.exe,它本是为不方便按组合键的人设计的 Windows系统按5下shift后,Windows就执 ...

  4. 尝试用Vue.js开发网页小游戏的过程

    准备 首先去官方下载并安装VSCODE,下载地址 https://code.visualstudio.com/.安装后打开会发现是英文版的,需要去安装插件来汉化.具体是在扩展插件搜索chinese,选 ...

  5. Java 多线程--ThreadLocal Timer ExecutorService

    ThreadLocal /** * ThreadLocal:每个线程自身的存储本地.局部区域 * @author xzlf * */ public class ThreadLocalTest01 { ...

  6. PHP 新特性:如何善用接口与Trait

    首先! 接口也可以继承,通过使用 extends 操作符. 案例: <?php interface a { public function foo(); } interface b extend ...

  7. docker(1)

    什么是Docker? Docker 最初是dotCloud公司创始人Solomon Hykes在法国期间发起的一个公司内部项目,它是基于dotCloud公司多年云服务技术的一次革新. Docker使用 ...

  8. linux抓包的实现

    工具: wireshark tcpdump 在这里仅仅介绍后者: 在网络问题的调试中,tcpdump应该说是一个必不可少的工具,和大部分linux下优秀工具一样,它的特点就是简单而强大. 默认情况下, ...

  9. Java反射机制概念及使用

    反射机制 —— 将类中的所有成员反射成对于的类. 以“com.test.Person”类为例                      转换对应的类                获取方法      ...

  10. 关于SpringBoot集成myBatis时,mapper接口注入失败的问题

    问题描述: 在Spring Boot集成myBatis时,发现启动时,mapper接口一直注入失败. 现象如下: VehicleDAO就是需要的mapper对象,一个简单的接口. 已经在applica ...