计划模式-创建型模式-工厂模式

打印 上一主题 下一主题

主题 1027|帖子 1027|积分 3081

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
        工厂模式提供了一种创建对象的方法,使得创建对象的过程与使用对象的过程相分离。使用工厂模式,将对象的创建逻辑封装再一个工厂类中,而不是再客户端代码中直接实例化对象,提高了代码的可维护性和可拓展性。        
一、优点

(1)调用者只需要知道对象的名称即可创建对象。
(2)扩展性高,如果需要增加新产物,只需扩展一个工厂类即可。
(3)屏蔽了产物的详细实现,调用者只关心产物的接口。
二、缺点

每次增加一个产物时,都需要增加一个详细类和对应的工厂,使系统中类的数量成倍增加,增加了系统的复杂度和详细类的依赖。
三、留意事项

工厂模式适用于天生复杂对象的场景。如果对象较为简单,通过 new 即可完成创建,则不必使用工厂模式。使用工厂模式会引入一个工厂类,增加系统复杂度。
四、结构

工厂模式包含以下几个主要角色:


  • 抽象产物(Abstract Product):定义了产物的共同接口或抽象类。它可以是详细产物类的父类或接口,规定了产物对象的共同方法。
  • 详细产物(Concrete Product):实现了抽象产物接口,定义了详细产物的特定举动和属性。
  • 抽象工厂(Abstract Factory):声明白创建产物的抽象方法,可以是接口或抽象类。它可以有多个方法用于创建差别类型的产物。
  • 详细工厂(Concrete Factory):实现了抽象工厂接口,负责实际创建详细产物的对象。
五、详细实现流程 

        创建一个ShapeFactory工厂类流程如下:
(1)创建一个接口 
  1. public interface Shape {
  2.    void draw();
  3. }
复制代码
(2)创建实现接口的实体类 
  1. public class Rectangle implements Shape {
  2.    @Override
  3.    public void draw() {
  4.       System.out.println("Inside Rectangle::draw() method.");
  5.    }
  6. }
复制代码
  1. public class Square implements Shape {
  2.    @Override
  3.    public void draw() {
  4.       System.out.println("Inside Square::draw() method.");
  5.    }
  6. }
复制代码
  1. public class Circle implements Shape {
  2.    @Override
  3.    public void draw() {
  4.       System.out.println("Inside Circle::draw() method.");
  5.    }
  6. }
复制代码
 (3)创建一个工厂,天生基于给定信息的实体类的对象
  1. public class ShapeFactory {
  2.    
  3.    //使用 getShape 方法获取形状类型的对象
  4.    public Shape getShape(String shapeType){
  5.       if(shapeType == null){
  6.          return null;
  7.       }        
  8.       if(shapeType.equalsIgnoreCase("CIRCLE")){
  9.          return new Circle();
  10.       } else if(shapeType.equalsIgnoreCase("RECTANGLE")){
  11.          return new Rectangle();
  12.       } else if(shapeType.equalsIgnoreCase("SQUARE")){
  13.          return new Square();
  14.       }
  15.       return null;
  16.    }
  17. }
复制代码
(4)使用该工厂,通过通报类型信息获取实体类的对象
  1. public class FactoryPatternDemo {
  2.    public static void main(String[] args) {
  3.       ShapeFactory shapeFactory = new ShapeFactory();
  4.       //获取 Circle 的对象,并调用它的 draw 方法
  5.       Shape shape1 = shapeFactory.getShape("CIRCLE");
  6.       //调用 Circle 的 draw 方法
  7.       shape1.draw();
  8.       //获取 Rectangle 的对象,并调用它的 draw 方法
  9.       Shape shape2 = shapeFactory.getShape("RECTANGLE");
  10.       //调用 Rectangle 的 draw 方法
  11.       shape2.draw();
  12.       //获取 Square 的对象,并调用它的 draw 方法
  13.       Shape shape3 = shapeFactory.getShape("SQUARE");
  14.       //调用 Square 的 draw 方法
  15.       shape3.draw();
  16.    }
  17. }
复制代码
 


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

tsx81429

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表