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

工厂模式核心:分工

简单工厂模式不符合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. 处理数字的类 —— Math类 、 Random类 、 BigDecimal类 与 BigInteger类

    在我们学习C语言时,我们处理数据时要调用很多函数,那么,Java也有很多的方法可以来处理数值的类. 那么,在本篇博文中,本人就来讲解三个用于处理数值的类 -- Math类 . Random类 与 Bi ...

  2. pytorch 手写数字识别项目 增量式训练

    dataset.py ''' 准备数据集 ''' import torch from torch.utils.data import DataLoader from torchvision.datas ...

  3. SeleniumHQ

    下载地址:http://www.seleniumhq.org/download/

  4. Scrapy模拟登录信息

    携带cookie模拟登录 需要在爬虫里面自定义一个start_requests()的函数 里面的内容: def start_requests(self): cookies = '真实有效的cookie ...

  5. dns的抓包分析

    dns: 域名系统(服务)协议 dns的解析全过程: 1. 浏览器先检查自身缓存中有没有被解析过的这个域名对应的ip地址,如果有,解析结束.同时域名被缓存的时间也可通过TTL属性来设置. 2. 如果浏 ...

  6. Java第一阶段作业总结

    目录 0.前言 1.作业过程总结 2.OO设计心得 3.测试的理解与实践 4.课程收获 5.对课程的建议 前言 本次博客针对第一阶段的三次作业发表总结,作业要求主要是初学者对于Java的基本语法.用法 ...

  7. zabbix管理,添加监控主机

    一:添加本机为监控主机  二.监控其他Linux主机agent端 1.环境部署 [root@localhost ~]# hostname agent.zabbix.com[root@localhost ...

  8. Android xUtils3.0使用手册(二) - 数据库操作

    步骤:  (1). 创建数据表: (2). DaoConfig 获取数据库的配置信息: (3).  获取数据库实例:  x.getDb(daoConfig); (4). 数据库的增删改查. 1. 创建 ...

  9. IDEA 之 ERROR:无法在web.xml或使用此应用程序部署的jar文件中解析绝对uri:[http://java.sun.com/jsp/jstl/core]

    问题描述:在使用IDEA对JSTL进行测试时出现error:无法在web.xml或使用此应用程序部署的jar文件中解析绝对uri:[http://java.sun.com/jsp/jstl/core] ...

  10. Android Resourse

    为什么80%的码农都做不了架构师?>>>   使用情景: 实现帧动画步骤的控制,这样动态的获取Drawable资源对应的R id,播放到那一步就加载到哪一步 private void ...