- N +

设计模式之工厂方法模式

设计模式之工厂方法模式原标题:设计模式之工厂方法模式

导读:

工厂方法模式意图 工厂方法在MVC中应用的很广泛。 工厂方法意在分离产品与创建的两个层次,使用户在一个工厂池中可以选择自己想要使用的产品,而忽略其创建过程。 简单来说,就像一个...

文章目录 [+]

工厂方法模式意图

 工厂方法在MVC中应用的很广泛。

 工厂方法意在分离产品与创建的两个层次,使用户在一个工厂池中可以选择自己想要使用的产品,而忽略其创建过程。

 简单来说,就像一个大型的工厂,对于消费者来说,只需要知道都有什么工厂的产品生产出来,而不需要关心工厂是如何生产产品的。对于工厂来说,必须知道所有的产品的制造方法。

工厂方法模式角色

工厂方法模式组成: 

       1)抽象工厂角色: 这是工厂方法模式的核心,它与应用程序无关。是具体工厂角色必须实现的接口或者必须继承的父类。在java中它由抽象类或者接口来实现。 
       2)具体工厂角色:它含有和具体业务逻辑有关的代码。由应用程序调用以创建对应的具体产品的对象。 
       3)抽象产品角色:它是具体产品继承的父类或者是实现的接口。在java中一般有抽象类或者接口来实现。 
       4)具体产品角色:具体工厂角色所创建的对象就是此角色的实例。在java中由具体的类来实现。 
       工厂方法模式使用继承自抽象工厂角色的多个子类来代替简单工厂模式中的“上帝类”。正如上面所说,这样便分担了对象承受的压力;而且这样使得结构变得灵活 起来——当有新的产品产生时,只要按照抽象产品角色、抽象工厂角色提供的合同来生成,那么就可以被客户使用,而不必去修改任何已有 的代码。可以看出工厂角色的结构也是符合开闭原则的! 

适用场景

  1 当一个类不知道它所必须创建的对象的类的时候。

  2 当一个类希望由他的子类来制定它所创建的对象的时候

  3 当类创建对象的职责委托给多个帮助子类中的某一个,并且希望进行一些信息的局部初始化的时候。

工厂方法模式-代码讲解

工厂方法需要一个工厂接口,提供了基本的类模式,和一个产品接口,提供基本的方法。

interface Creator {
    
    public Product factory();

}

interface Product {
    
    public void Say();

}

接下来就是具体的工厂方法,可以创建不同的产品。

 class ConcreteCreator1 implements Creator{
     public Product factory() {
         return new ConcreteProduct1();
     }
 }
 class ConcreteCreator2 implements Creator{
     public Product factory() {
        return new ConcreteProduct2();
    }
 }


其次需要不同的产品。

  class ConcreteProduct1 implements Product{
      public void Say() {
          System.out.println("ConcreteProduct1");
      }
  }
  class ConcreteProduct2 implements Product{
      public void Say() {
          System.out.println("ConcreteProduct2");
      }
 }

使用方法,大致如下:

 public class test {
           public static Creator creator1,creator2;
          public static Product product1,product2;
          public static void main(String[] args){
               creator1 = new ConcreteCreator1();
               creator2 = new ConcreteCreator2();
               
               product1 = creator1.factory();
               product2 = creator2.factory();
              
              product1.Say();
              product2.Say();
          }
      }


本文标题:设计模式之工厂方法模式
本文链接:http://kyjszj.com/wdzl/11.html
作者授权:除特别说明外,本文由 开源技术之家 原创编译并授权 开源技术之家 刊载发布。
版权声明:本文不使用任何协议授权,您可以任何形式自由转载或使用。

有好的文章希望我们帮助分享和推广,猛戳这里我要投稿

返回列表
上一篇:
下一篇:

发表评论中国互联网举报中心

快捷回复:

    评论列表 (暂无评论,共911人参与)参与讨论

    还没有评论,来说两句吧...