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

工厂模式核心:分工

简单工厂模式不符合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. api_DZFPKJ & api_DZFPCX(get_AES_url代码优化)

    通过AES加密网站的接口来传值,不需要手动加密字符串后复制过来传值. #coding:utf-8 import requests import re def get_aes_url(key, text ...

  2. Linux下nginx自启动配置

    1.在linux系统的/etc/init.d/目录下创建nginx文件 vim /etc/init.d/nginx 在脚本中添加一下命令(内容主要参考官方文档) #!/bin/sh # # nginx ...

  3. pytorch 文本情感分类和命名实体识别NER中LSTM输出的区别

    文本情感分类: 文本情感分类采用LSTM的最后一层输出 比如双层的LSTM,使用正向的最后一层和反向的最后一层进行拼接 def forward(self,input): ''' :param inpu ...

  4. curl发送多维数组

    //通过curl模拟post的请求: function SendDataByCurl($url,$data=array()){ //对空格进行转义 $url = str_replace(' ','+' ...

  5. Web中间件常见漏洞

    IIS Internet Information Services--windows 解析漏洞 IIS 6.x 基于文件名:该版本默认会将 *.asp;.jpg 此种格式的文件名,当成 Asp 解析, ...

  6. 共享文件夹下其他文件可以访问但php文件访问不了的原因

    刚开始的问题是在virtualbox里的共享文件夹下的项目运行不了,原因是宝塔下nginx的用户和用户组默认是www 和 www 需要改成www vboxsf(因为自动挂载的目录为/media/sf_ ...

  7. 企业级 Harbor 镜像仓库

    Harbor是由VMWare公司开源的容器镜像仓库.事实上,Harbor是在Docker Registry上进行了相应 的企业级扩展,从而获得了更加广泛的应用,这些新的企业级特性包括:管理用户界面,基 ...

  8. 如何用hugo 搭建博客

    1,Hugo 简介 搭建个人博客有很多开源的博客框架,我们要介绍的框架叫作Hugo.Hugo 是一个基于Go 语言的框架,可以快速方便的创建自己的博客. Hugo 支持Markdown 语法,我们可以 ...

  9. 自动获取时间html代码

    <button type="button" onclick="document.getElementById('demo').innerHTML = Date()& ...

  10. 1309:【例1.6】回文数(Noip1999)

    传送门:http://ybt.ssoier.cn:8088/problem_show.php?pid=1309 [题目描述] 若一个数(首位不为零)从左向右读与从右向左读都是一样,我们就将其称之为回文 ...