设计模式之—工厂模式

工厂模式:

创建过程:

  1. 创建Shape接口
public interface Shape {void draw();
}
  1. 创建实现类:
public class Circle implements Shape {@Overridepublic void draw() {System.out.println("this is a circle!");}
}
public class Square implements  Shape {@Overridepublic void draw() {System.out.println("this is a square!");}
}
  1. 创建类的工厂:
public  class ShapeFactory {public  static  Shape getShape(String shape){if("circle".equals(shape)){return new Circle();}else if("square".equals(shape)){return new Square();}else{return null;}}
}
  1. 利用测试类进行测试:
public class FMMain {public static void main(String[] args) {Shape circle = ShapeFactory.getShape("circle");circle.draw();}}

抽象工厂模式:

创建过程:
5. 创建shape接口:

public interface Shape {void draw();
}

2.创建shape实现类:

public class Circle implements Shape{@Overridepublic void draw() {System.out.println("this is a Circle!");}
}
public class Rectangle implements Shape{@Overridepublic void draw() {System.out.println("this is a rectangle!");}
}
  1. 创建Color接口:
public interface Color {void fill();
}
  1. 创建Color实现类:
public class Green implements Color {@Overridepublic void fill() {System.out.println("this is Green!");}
}
public class Red implements Color{@Overridepublic void fill() {System.out.println("this is Red!");}
}
  1. 为 Color 和 Shape 对象创建抽象类来获取工厂。
public abstract class AbstractFactory {public abstract Color getColor(String color);public abstract Shape getShape(String shape);
}
  1. 创建扩展了 AbstractFactory 的工厂类
public class ColorFactory extends AbstractFactory {@Overridepublic Color getColor(String color) {if("green".equals(color)){return new Green();}else if("red".equals(color)){return new Red();}else{return null;}}
 @Overridepublic Shape getShape(String shape) {return null;}
}
public class ShapeFactory extends AbstractFactory {@Overridepublic Color getColor(String color) {return null;}
 @Overridepublic Shape getShape(String shape) {if("rectangle".equals(shape)){return new Rectangle();}else if("circle".equals(shape)){return new Circle();}else{return null;}}
}
  1. 创建一个工厂生成器类
public class FactoryProducer {public static AbstractFactory getFactory(String type){if("color".equals(type)){return new ColorFactory();}else if("shape".equals(type)){return new ShapeFactory();}else{return null;}}
}
  1. 使用 FactoryProducer 来获取 AbstractFactory,进行测试:
public class AFMain {public static void main(String[] args) {AbstractFactory color = FactoryProducer.getFactory("color");Color green = color.getColor("green");green.fill();}
}

一篇博客读懂设计模式之---工厂模式相关推荐

  1. 教你如何一篇博客读懂设计模式之—--工厂模式

    一篇博客读懂设计模式之-工厂模式 工厂模式在我们日常开发的时候经常用到,相信大家都有了一定的了解,工厂模式是一种创建对象的设计模式,它提供一种创建对象的最佳方式. 主要过程是: 定义一个创建对象的接口 ...

  2. 一篇博客读懂设计模式之---委派模式

    一篇博客读懂设计模式之-委派模式 委派模式可能大家听起来不太熟悉,但是在代码开发的时候却很好用,下面从几个方面来介绍一下 what:是什么? 委派模式:顾名思义,委托其他对象或者实例来帮我们完成任务, ...

  3. 教你如何一篇博客读懂设计模式之—--原型模式

    教你如何一篇博客读懂设计模式之----原型模式 what:是什么 原型模式: 用于创建重复的对象,既不用一个属性一个属性去set和get,又不影响性能,原型模式产生的对象和原有的对象不是同一个实例,他 ...

  4. 一篇博客读懂设计模式之---模板方法模式

    设计模式之模板方法模式: 定义一个操作中的算法的骨架,而将一些步骤延迟到子类中.模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤. 简而言之就是:父类定义了骨架(调用哪些方法及其 ...

  5. 一篇博客读懂设计模式之-----策略模式

    设计模式之策略模式 在策略模式中,我们创建表示各种策略的对象和一个行为随着策略对象改变而改变的对象 定义一系列的算法,把它们一个个封装起来, 并且使它们可相互替换. 主要解决:在有多种算法相似的情况下 ...

  6. 一篇博客读懂设计模式之---动态代理与反射

    一篇博客读懂设计模式之---动态代理与反射 先来讲一下反射: 1 关于反射 反射最大的作用之一就在于我们可以不用在编译时就知道某个对象的类型,而在运行时通过提供完整的"包名+类名.class ...

  7. 一篇博客读懂设计模式之---单例模式

    一篇博客读懂设计模式之---单例模式 一.  单例模式 单例对象(Singleton)是一种常用的设计模式.在Java应用中,单例对象能保证在一个JVM中,该对象只有一个实例存在.这样的模式有几个好处 ...

  8. [入门篇]用史上最生动的方式让你一篇博客搞懂Linux进程地址空间,包看包懂!

    目录 0.前言 1.初始程序的地址空间划分 1.1程序地址空间图解 1.2程序地址空间区域划分验证 1.3 程序地址空间小补充 1.4 引入进程地址空间 *2. 两个生动的例子理解进程地址空间 2.1 ...

  9. 1小时搞懂设计模式之工厂模式(方法工厂)

    1 简单工厂缺点 以及方法工厂实现逻辑 通过我的上一篇博客 工厂模式之简单工厂 我们了解了什么是简单工厂.我们可以通过创建钢工厂类对象来获取不同类型的钢对象.但是如果我们每次新增加一种类型的钢,我们需 ...

最新文章

  1. 互联网大脑进化简史,华为云EI智能体加入-2018年7月新版
  2. [ASP.NET 控件实作 Day31] TBContextMenu 控件三种不同模式的 Click 动作
  3. django第三次(转自刘江)
  4. git设置和取消代理
  5. 将虚拟机的版本改为1.6的方法
  6. linux内核分析与移植,内核分析移植
  7. hibernate笔记--缓存机制之 二级缓存(sessionFactory)和查询缓存
  8. java面试题之什么是ThreadLocal?底层如何实现的?
  9. CodeSmith激活教程
  10. 【LWIP】(补充)STM32H743(M7内核)CubeMX配置LWIP并ping通
  11. Java8 Instant 时间戳
  12. 一款兼容Arduino的模拟TDS传感器
  13. windows无法连接到打印机_电脑、打印机常见故障处理
  14. 手机连接投影机的步骤_手机怎么连接投影仪?这几招实用
  15. 如何在日志中查找mysql日志临时密码_通过查询日志定位持有锁的SQL语句
  16. 思维方式-《思维的发现》书中的精髓:两个天才心理学家经历的奇妙经济学之旅。
  17. 华为watch gt2能升鸿蒙系统吗,华为Watch GT2 Pro发布倒计时,或是首款鸿蒙系统手表?...
  18. 一步一步教你写股票走势图——K线图二(图表联动)
  19. nerdctl 工具(用于 containerd 但兼容 docker CLI 习惯)
  20. dell服务器 指示灯_Dell PowerEdge:传统服务器(第10代和第11代)上的系统LED状态指示灯...

热门文章

  1. SubSonic框架使用图解
  2. mybatis-plus (3.4.2)使用
  3. 利用ASP.NET MVC 的默认类型绑定器---将Jquery datatables中的数据强类型绑定到实体类中
  4. java设计模式组合模式详解_《JAVA设计模式》之组合模式(Composite)
  5. linux下tomcat脚本,Linux下重启多个 tomcat 服务的脚本(推荐)
  6. oracle9i 恢复数据库,Oracle9i RMAN备份及恢复步骤(zt)
  7. python图形化编程工具哪个好_mPython(图形化编程软件) V0.5.0 官方版
  8. delphi chart 曲线实时_发展学生曲线跑能力的体育游戏及运用研究
  9. jq ajax提交评论,织梦评论怎么改成自己的jq ajax评论
  10. 英特尔发布其首个适配Win11的显卡驱动