博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
工厂模式
阅读量:3898 次
发布时间:2019-05-23

本文共 2132 字,大约阅读时间需要 7 分钟。

在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。把new对象的工作交给工厂类去执行。

1.先定义一个接口

package com.yecc.suanfa.factory;/** * Created by yecc on 2020/11/27 15:24 */public interface Shape {
void draw();}

2.三个类继承接口

package com.yecc.suanfa.factory;/** * Created by yecc on 2020/11/27 15:24 */public class Rectangle implements Shape{
@Override public void draw() {
System.out.println("Inside Rectangle::draw() method."); }}
package com.yecc.suanfa.factory;/** * Created by yecc on 2020/11/27 15:25 */public class Circle implements Shape {
@Override public void draw() {
System.out.println("Inside Circle::draw() method."); }}
package com.yecc.suanfa.factory;/** * Created by yecc on 2020/11/27 15:25 */public class Square implements Shape {
@Override public void draw() {
System.out.println("Inside Square::draw() method."); }}

3.创建工厂:

package com.yecc.suanfa.factory;/** * Created by yecc on 2020/11/27 15:26 */public class ShapeFactory {
//使用 getShape 方法获取形状类型的对象 public 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.测试:

package com.yecc.suanfa.factory;/** * Created by yecc on 2020/11/27 15:26 */public class FactoryPatternDemo {
public static void main(String[] args) {
ShapeFactory shapeFactory = new ShapeFactory(); //获取 Circle 的对象,并调用它的 draw 方法 Shape shape1 = shapeFactory.getShape("CIRCLE"); //调用 Circle 的 draw 方法 shape1.draw(); //获取 Rectangle 的对象,并调用它的 draw 方法 Shape shape2 = shapeFactory.getShape("RECTANGLE"); //调用 Rectangle 的 draw 方法 shape2.draw(); //获取 Square 的对象,并调用它的 draw 方法 Shape shape3 = shapeFactory.getShape("SQUARE"); //调用 Square 的 draw 方法 shape3.draw(); }}

转载地址:http://dnyen.baihongyu.com/

你可能感兴趣的文章
GIT分支管理是一门艺术
查看>>
Cscope在emacs中的配置与使用
查看>>
emacs 2.4安装问题 ecb
查看>>
ecb里使用自定义快捷键切换窗口
查看>>
vim(gvim)支持对齐线
查看>>
CentOS编译安装Lighttpd1.4.28
查看>>
实践HTTP206状态:部分内容和范围请求
查看>>
【C++基础】拷贝构造函数的参数必须是引用类型
查看>>
【C++基础】virtual析构函数
查看>>
【Java基础】面向对象
查看>>
【Java.Web】web.xml详解
查看>>
J2EE的技术体系
查看>>
【Java.Web】Java Web应用程序的规范目录结构,*WEB组件的URL/入口*
查看>>
【基础篇】计算机网络
查看>>
OSI 7层详解
查看>>
【C++基础】重载overload、重写(覆盖)override、隐藏hide的区别
查看>>
【算法详解】洗牌算法
查看>>
【设计模式基础】行为模式 - 1 - 观察者(Observer)
查看>>
从关系型数据库到非关系型数据库
查看>>
【数据库基础】数据库事务 - Transaction
查看>>