欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

简单工厂模式:真正的“封装隔离”

程序员文章站 2024-02-26 19:02:46
...

一、举例

特别喜欢王宝强主演的电视剧“士兵突击”,他那样老实憨厚一根筋,却凭着那份执着,成就了自己的不平凡。
其中有一段,许三多刚调到七连,成才来三班看许三多,白铁军向成才要烟,成才给的是春城,等成才走后白铁军对许三多说:“塔山是给连长排长,红河是给班长班副,春城是给战友的,哪个连都有这样的人,七连揍这一个”。

简单工厂模式:真正的“封装隔离”

简单工厂模式:真正的“封装隔离”

简单工厂模式:真正的“封装隔离”

联系到设计模式:
抽象类:烟
具体实现类:塔山、红河、春城
工厂类:成才
客户端:连长、排长、班长、战友、白铁军

// 接口定义:烟
public interface Cigarette {
    // 冒烟方法
    public void smoking();
}

// 具体实现对象:塔山
public class TaShan implements Api {
    public void smoking() {
        System.out.println("我冒的是塔山的烟");
    }
}

// 具体实现对象:红河
public class HongHe implements Api {
    public void smoking() {
        System.out.println("我冒的是红河的烟");
    }
}

// 具体实现对象:春城
public class ChunCheng implements Api {
    public void smoking() {
        System.out.println("我冒的是春城的烟");
    }
}

// 工厂类,用来创建Api对象
public class ChengCai {
    public static Cigarette getCigarette(String who) {
        Cigarette cigarette = null;
        if (who.equals("连长") || who.equals("排长")) {
            cigarette = new TaShan();
        } else if (who.equals("班长")) {
            cigarette = new HongHe();
        } else if (who.equals("战友")) {
            cigarette = new ChunCheng();
        }
        return cigarette;
    }
}

// 客户端:白铁军
public class BaiTiejun {
    public static void askCigarette() {
        Cigarette cigarette = ChengCai.getCigarette("战友");
    }
}

二、用来解决的问题

大家都知道,在Java应用开发中,要“面向接口编程”。为什么要面向接口编程呢? 由于外部调用和内部实现被接口隔离开了,那么只要接口不变,内部实现的变化就不会影响到外部应用,从而使得系统更加灵活,具有更好的扩展性和可维护性,这也验证了那句话“接口是系统可挺拔性的保证”。根据接口的作用和用途,浓缩下来,接口的思想就是:“封装隔离”

举个接口使用的例子:

Api api = new Impl();  

看上面的代码有没有发现什么问题?
想想接口的功能和思想,你会发现客户端调用的时候,客户端不但知道了接口还知道了具体的实现就是Impl。接口的思想是“封闭隔离”,而实现类应该是同接口封装并同客户端隔离开的,也就是说客户端不应该知道具体的实现类就是Impl。
总结起来:工厂设计模式就是为了做到真正的“封装隔离”。

三、定义

提供一个创建对象实例的功能,而无需关心其具体实现。被创建实例的类型可以是接口、抽象类,也可以是具体的类。

四、UML图

简单工厂模式:真正的“封装隔离”

  • AbstractProduct:抽象产品,包含关于产品的抽象方法。
  • Product:具体产品,包含对抽象产品的具体实现。
  • AbstractFactory:抽象工厂,包含所有产品创建的抽象方法。
  • ConcreateFactory:具体工厂,创建具有特定实现的产品对象。
  • Client:客户端,通过工厂类获取接口对象,然后面向接口编程。

五、使用场景

  • 想要完全封装隔离,让外部只能通过接口来操作封装体。
  • 想要对外创建对象的职责集中管理和控制。

六、备注

简单工厂在平常的开发中还是挺常用的,简单而神奇,所以还是应该好所以好掌握它。