JAVA工厂方法模式

1.工厂方法模式概念

工厂方法模式(Factory Method) :  定义一个用于创建对象的接口,让子类决定实例化了哪个类。工厂方法使一个类的实例化延迟到其子类。  用于生产同一等级结构中的固定产品。(支持增加任意产品
特点: (1)工厂方法模式是简单工厂模式的进一步抽象和推广 。
           (2)  使用了多态性,工厂方法模式保持了简单工厂模式的优点,克服了它缺点。 

      又叫多态性工厂模式(Polymorpic Factory Pattern)它由四种角色组成(关系见下面的类图):

     1、抽象工厂(Creator)角色:是工厂方法模式的核心,与应用程序无关。任何在模式中创建的对象的工厂类必须实现这个接口。
     2、具体工厂(Concrete Creator)角色该角色实现了抽象工厂接口,含有与应用相关的逻辑,并且受到应用程序的调用,以创建产品对象。 
     3、抽象产品(Product)角色:它一般是具体产品继承的父类或者实现的接口。在java中由接口或者抽象类来实现。                                          4具体产品(Concrete Product)角色:工厂类所创建的对象就是此角色的实例。在java中由一个具体类实现。

     还是上次那个例子(上一篇JAVA简单工厂模式,奥迪和比亚迪的跑法。哈哈,比亚迪可以逆天么?

2.  UML图。

  

3. 具体代码

   (1)抽象工厂

public interface CarFactory{
	public Car CreateCar();
	//更多其他逻辑.....
}

    (2)具体工厂

       奥迪工厂:实现CarFactory接口,是一个用于生产 奥迪的具体工厂
public class AudiFactory implements CarFactory {
	//创建者
	@Override
	public Car CreateCar() {
		return new AuDi();//返回奥迪给ClientFactoryMethod
		//更多逻辑
	}
}
      比亚迪工厂:实现CarFactory接口,是一个用于生产比亚迪的具体工厂
public class BYDFactory implements CarFactory {
	//创建者
	@Override
	public Car CreateCar() {
		return new BYD();//返回比亚迪给ClientFactoryMethod
		//更多逻辑
	}
}
    (3)抽象产品
<span style="font-weight: normal;">    //抽象产品角色  
    public interface Car {  
          public void run();                                                                                                //更多具体逻辑.......  
    }  </span>

        (4)具体产品

         奥迪产品: 实现Car接口,是一个具体的产品
//具体产品奥迪 </span> 
  public class AuDi implements Car{  
        @Override  
        public void run() {  
            System.out.println("奥迪跑起来了");  
        }                                                                                                                  //更多具体逻辑......  
    }  
        比亚迪产品: 实现Car接口,是一个具体的产品
 //具体产品比亚迪                                                                                                     public class BYD implements Car{  
    @Override  
    public void run() {  
    System.out.println("比亚迪跑起来了");                                                                                 }
   }                                               
      测试:
//工厂方法模式
public class ClientFactoryMethod {//客户端
	//调用者
	public static void main(String[] args) {
	      Car audi=new AudiFactory().CreateCar();//通过具体的工厂创建产品
	      Car byd=new BYDFactory().CreateCar();
         //车跑
          audi.run();
          byd.run();  
   }
}

4.小结

工厂方法模式的优点:

1.良好的封装性,代码结构清晰。创建产品时只要知道这个产品的类名或约束字符串就可以,不用知道创建的过程,降低了板块间的耦合。
2.优秀的可拓展性。  在增加产品类的情况下,只要适当地修改具体的工厂类或扩展一个工厂类,就可以适应变化。  如要新增加奔驰benz,只要新建一个 奔驰产品:  实现Car接口奔驰 工厂:实现CarFactory接口,就行了。
3.屏蔽产品类,产品类如何实现如何变化,调用者不用关心,只需关心产品的接口,只要接口保持不变,系统的上层模版就不会发生变化。
4.工厂方法模式是典型的解耦框架,符合 迪米特法则 ,也符合 依赖倒置原则 ,还符合 里氏替换原则
迪米特法则 又叫作最少知识原则(Least Knowledge Principle 简写LKP),就是说一个对象应当对其他对象有尽可能少的了解,不和陌生人说话。
依赖倒置原则 A.高层次的模块不应该依赖于低层次的模块,他们都应该依赖于抽象。 B.抽象不应该依赖于具体实现,具体实现应该依赖于抽象。
里氏替换原则 OCP作为OO的高层原则,主张使用“抽象(Abstraction)”和“多态(Polymorphism)”将设计中的静态结构改为动态结构,维持设计的封闭性。“抽象”是语言提供的功能。“多态”由继承语义实现。
工厂模式在项目中使用的非常频繁,在很多框架的代码中都可以发现它的应用。
PS:

总结不好,希望吐槽!



  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值