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

工厂模式核心:分工

简单工厂模式不符合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. Jar包一键重启的Shell脚本及新服务器部署的一些经验

    原文首发于博客园,作者:后青春期的Keats:地址:https://www.cnblogs.com/keatsCoder/ 转载请注明,谢谢! 前言 最近公司为客户重新部署了一套新环境,由我来完成了基 ...

  2. 不借助多余参数也可交换两个参数(c++,swap函数)

    利用a^a=0异或属性 [示例代码] #include<stdio.h> void data_swap(int &a,int &b){ a = a ^ b; b = a ^ ...

  3. python-Django收集主机信息json格式

    Control: from django.conf.urls import patterns, include, url from django.contrib import admin admin. ...

  4. 数值计算方法实验之Newton 多项式插值(MATLAB代码)

    一.实验目的 在己知f(x),x∈[a,b]的表达式,但函数值不便计算或不知f(x),x∈[a,b]而又需要给出其在[a,b]上的值时,按插值原则f(xi)=yi (i=0,1,……, n)求出简单函 ...

  5. word2sequence 把字符串转换数字编码

    地址:http://ai.stanford.edu/~amaas/data/sentiment/,这是一份包含了5万条流行电影的评论数据,其中训练集25000条,测试集25000条. 1.准备数据 d ...

  6. Java 反射调用方法 - 不跳过安全检查、跳过安全检查和普通方法性能比较测试

    java中反射提供灵活性同时,给运行效率带来了一定影响.写个代码测试一下 package com.xzlf.reflectTest; import java.lang.reflect.Method; ...

  7. 数据挖掘入门系列教程(十点五)之DNN介绍及公式推导

    深度神经网络(DNN,Deep Neural Networks)简介 首先让我们先回想起在之前博客(数据挖掘入门系列教程(七点五)之神经网络介绍)中介绍的神经网络:为了解决M-P模型中无法处理XOR等 ...

  8. Nginx+Fastdfs

    注: 在配置时,使用非root用户配置 fdfs/fdfs 1.    集群部署 1.1.    准备 创建目录:本文档中所有内容安装到/fdfs目录 [fdfs@5861be93b5b0 /]$mk ...

  9. automake autoconf 使用详解

    本文地址: http://www.laruence.com/2009/11/18/1154.html 文章转自: http://www.linuxcomputer.cn/ 作为Linux下的程序开发人 ...

  10. Python 如何实现 单实例

    出处:https://stackoverflow.com/questions/380870/make-sure-only-a-single-instance-of-a-program-is-runni ...