num08---工厂方法模式
Posted dxxdsw
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了num08---工厂方法模式相关的知识,希望对你有一定的参考价值。
前提: 简单工厂模式,是在工厂类中进行逻辑判断,根据客户端的条件动态实例化相关的类,去除了客户端与具体产品的依赖,但是这样有一个问题,违反了开放封闭原则,如果新增一个逻辑,就必须修改工厂类中的逻辑判断的代码。 工厂模式解决了这个缺点。将工厂类接口抽象化,然后创建不同的子类工厂类,实现工厂类接口。每个子类工厂去实现具体的逻辑产品类。本质上就是把原有工厂类实现的 实例化代码逻辑 延迟 到 其子类中去实现。
样例代码:
创建一个模型工厂接口以及两个模型工厂实现类,一个徐工,一个利勃海尔,不同工厂分别创建对应品牌的模型对象。
* @description :建立模型父类工厂接口 */ public interface CreateModelParentFactory { //创建模型方法 public Model createModel(); }
* @description :利勃海尔模型创建工厂 */ public class CreateLiebherrModelFactory implements CreateModelParentFactory { @Override public Liebherr createModel() { return new Liebherr(); } }
* @description :徐工模型创建工厂 */ public class CreateXuGongModelFactory implements CreateModelParentFactory { @Override public Xugong createModel() { return new Xugong(); } }
创建模型类以及不同品牌的模型类子类。
* @description : */ public class Model { public void testFunction() { System.out.println("我是模型父类"); } }
public class Liebherr extends Model{ public void testFuction() { System.out.println("我是利勃海尔模型"); } }
*/ public class Xugong extends Model { public void testFunction() { System.out.println("我是徐工模型"); } }
测试方法:
* @description : */ public class Main { public static void main(String[] args) { CreateLiebherrModelFactory liFactory = new CreateLiebherrModelFactory(); Liebherr libModel = liFactory.createModel(); libModel.testFuction(); } }
结果:
我是利勃海尔
,嘿嘿(●´∀`●)
现在如果想要生产新的 三一重工的模型,就去新建三一模型类、三一模型工厂。即可。
相比较简单工厂模式而言,工厂模式避免了违背开放封闭原则,又保持了封装对象的创建过程,缺点是每增加一个产品,需要增加类,增加开发量。
不过个人认为这个缺点基本可以忽略。孰轻孰重,很明显。
以上是关于num08---工厂方法模式的主要内容,如果未能解决你的问题,请参考以下文章