简单(静态)工厂模式

简单(静态)工厂模式

观察者模式

一、背景介绍


工厂模式是设计模式的一种,设计模式是自程序开发逐渐就有的,提高开发效率的一种设计思路,先前的开发者们一直在用,只是后来这四个人出了一本书总结了下,就是现在的23种设计模式:

1994年由 Erich Gamma、Richard Helm、Ralph Johnson 和 John Vlissides 四人合著出版的 Design Patterns - Elements of Reusable Object-Oriented Software(中文译名:设计模式 - 可复用的面向对象软件元素)书中首次提到的,所以叫GOF

书中共有三个层面的内容:

一、算是一个总结性的,把程序开发过程中在不同系统中多次使用过的成功设计的模式进行总结,用名称-问题-解决方案-实用效果这几个要素来描述;

二、提出了面向对象开发中“针对接口编程而不是针对实现编程”,“优先使用组合而不是继承”的总体设计思路;

三、就是基于上面的设计思路所形成的常用的设计模式,也就是现在流传最广的23种常见的设计模式;

设计模式是为了更好的实现开发,使代码更易懂,易维护。它也是为了解决大多数开发者们的问题而出现的,当然它也不是万能的。除了设计模式我们在开发过程中还需要遵循基本的设计原则,这里后面再说。

概念

许多人通晓并且使用的经过分类的代码设计经验的总结。
设计模式是开发者们在开发过程中面临一般问题的解决方案,这些解决方案是经过相当长的一段时间的试验和错误总结出来的。设计模式几乎在所有的编程里都适用。

目的

为了提高代码可重用性、可扩展性、健壮性、更容易被理解。

*当前说的设计模式是针对面向对象,而不是面向过程

二、知识剖析


工厂模式

工厂是为了实现对构造过程(创建过程)的封装。也是设计原则的体现。工厂模式是一种创建型的设计模式,主要思想就是替代new为我们创建对象,工厂可以选择创建对象的方法,对这个构造过程(创建方法)进行选择的逻辑就是工厂模式的逻辑。 这样也是为了给以后的系统带来更大的可扩展性,实现低耦合。

工厂模式大概有三种

简单工厂模式
工厂方法模式
抽象工厂模式

简单(静态)工厂模式

简单工厂模式是最初自然而然就有的设计思想,它只是把创建过程比较自然的封装了一下,又称为静态工厂模式,是直接根据条件决定创建的产品。

简单工厂模式由三部分组成:

  1. 工厂角色(工厂/工厂抽象类):它创建具体产品,实现了对创建过程(构造过程)的封装。也是设计原则的体现。工厂类里面是创建对象的逻辑,也就是对这个构造过程进行封装
  2. 抽象产品角色(产品抽象/接口类):工厂类所创建的产品的父类,或者说它们的共同接口
  3. 具体产品角色(产品实体类):工厂类所创建的任何对象都是这个角色的实例

工厂模式和抽象工厂则是多了一个共同的工厂接口,所有实例工厂都是这个接口工厂的实现类

三、常见问题


设计模式

  • 设计模式只是思路,并不能解决所有问题
  • 不要强制使用,它是用来解决问题,而不是寻找问题
  • 一定要在对的地方使用,不然只会适得其反

设计模式三大类:

1.创建型模式 : 专注于如何初始化对象,就是在创建对象的同时隐藏创建逻辑

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
简单工厂模式是一种创建型设计模式,它提供了一种创建对象的最佳方式。简单工厂模式通过将对象的创建委托给一个工厂类来实现,从而将对象的创建与使用分离。以下是简单Java工厂模式的示例: 1.定义一个接口Shape,包含draw方法。 ```java public interface Shape { void draw(); } ``` 2.定义三个实现类Circle、Rectangle和Square,实现Shape接口并重写draw方法。 ```java public class Circle implements Shape { @Override public void draw() { System.out.println("Circle.draw()"); } } public class Rectangle implements Shape { @Override public void draw() { System.out.println("Rectangle.draw()"); } } public class Square implements Shape { @Override public void draw() { System.out.println("Square.draw()"); } } ``` 3.定义一个工厂类ShapeFactory,包含一个静态方法getShape,根据传入的参数返回不同的Shape实例。 ```java public class ShapeFactory { public static Shape getShape(String shapeType) { if (shapeType == null) { return null; } if (shapeType.equalsIgnoreCase("CIRCLE")) { return new Circle(); } else if (shapeType.equalsIgnoreCase("RECTANGLE")) { return new Rectangle(); } else if (shapeType.equalsIgnoreCase("SQUARE")) { return new Square(); } return null; } } ``` 4.在客户端代码中,通过调用ShapeFactory的静态方法getShape来获取Shape实例,并调用draw方法。 ```java public class Client { public static void main(String[] args) { Shape circle = ShapeFactory.getShape("CIRCLE"); circle.draw(); Shape rectangle = ShapeFactory.getShape("RECTANGLE"); rectangle.draw(); Shape square = ShapeFactory.getShape("SQUARE"); square.draw(); } } ``` 输出结果为: ``` Circle.draw() Rectangle.draw() Square.draw() ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值