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

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

简单工厂模式的主要方式就是将不同实例对象的创建做统一管理,这样使用者只需要调用工厂类去创建不同的对象实例,而不用知道对象的具体创建和初始化过程;本文将举例去创建不同的形状,使用者只需要告诉工厂类要创建什么样的形状即可,使用者并不知道具体形状的创建过程。

Shape.java :首先创建形状接口,指定形状的共有属性或方法,本例中也可以使用普通类让子类继承

public interface Shape {   void draw();}

Rectangle.java:长方形

public class Rectangle implements Shape {   @Override   public void draw() {      System.out.println("Inside Rectangle::draw() method.");   }}

Triangle.java:三角形

public class Triangle implements Shape {   @Override   public void draw() {      System.out.println("Inside Triangle ::draw() method.");   }}

Circle.java:圆形

public class Circle implements Shape {   @Override   public void draw() {      System.out.println("Inside Circle::draw() method.");   }}

ShapeFactory.java:工厂类

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("TRIANGLE ")){         return new Triangle ();      }      return null;   }}

FactoryPatternDemo.java :主函数

public class FactoryPatternDemo {   public static void main(String[] args) {      ShapeFactory shapeFactory = new ShapeFactory(); //如果是静态方法就不用new对象了      //获取 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("TRIANGLE ");      //调用 Triangle 的 draw 方法      shape3.draw();   }

所有形状对象的创建都在工厂类里面封装好了,调用者——主函数并不知道创建对象和初始化的具体过程;如果本例使用了普通类Shaped的话,就集成了封装、继承、多态三个面向对象特性。

UML如下:
在这里插入图片描述

原文:

你可能感兴趣的文章
pfn_valid 源码分析
查看>>
dev/kmem 和dev/mem的区别
查看>>
test-definitions/blob/master/auto-test/bigdata/bigdata.sh
查看>>
/test-definitions/blob/master/auto-test/blktrace/blktrace.sh
查看>>
test-definitions/blob/master/auto-test/blogbench/blogbench.sh
查看>>
test-definitions/blob/master/auto-test/boost/boost.sh
查看>>
Java多态性理解
查看>>
Intellij Idea 工具在java文件中怎么避免 import .*包,以及import包顺序的问题
查看>>
Oracle中Blob转换成Clob
查看>>
Linux如何查看so中函数名
查看>>
自动管理代码的android.mk
查看>>
cocos2dx 2.2.6编译记录(1)
查看>>
makefile学习网站
查看>>
Lua教程:Lua调用C/C++函数(4)
查看>>
win下创建win32控制台工程,执行lua脚本
查看>>
cocos2dx android启动错误
查看>>
eclipse: android rename package name
查看>>
cocos2dx c++调用java思想
查看>>
lua math.ceil math.ceil
查看>>
cocos2dx CCNode计算node的大小
查看>>