Android重拾设计模式系列——工厂方法模式

个人博客CoorChice,https://chenbingx.github.io/ ,最新文章将会首发CoorChice的博客,欢迎探索哦 !
同时,搜索微信公众号CoorChice,或扫描文章末尾二维码,可以关注我的微信公众号。同期文章也将会优先推送到微信公众号中,以提醒您有新鲜文章出炉。

img_185e128b60f5265f35c150a5e53f5e2f.png
封面-设计模式.png

工厂方法模式和简单工厂模式本质是类似的,都是用来封装产品的创建过程。但它们的实现也有很大的,所以通常被作为两种不同的设计模式看待。

简单工厂模式传送门

定义及实质

  • 定义
    定义一个用于创建对象的接口,让子类决定实例化那一个对象,即使一个类的实现延迟到子类实现。
  • 实质
    延迟到子类选择实现。

虽然都是选择实现,但工厂方法模式主要用于创建一系列的产品簇(就是相似的东西),而简单工厂法可以创建任何互相没有关联的实例。

模式图解

工厂方法模式UML图

img_83704b7e3a3533d63d48d2f79dac8dd7.png
工厂方法模式UML图

从上图可以看出:

  1. Creator是抽象父类,ConcreteCreator是其子类;
  2. ConcreteCreator重写了父类的factoryMethod() 来创建真正的产品ConcreteProduct,也就是说ConcreteCreator依赖ConcreteProduct;需要注意,Creator依赖的是Product;
  3. ConcreteProduct实现了Product接口。
//Creator
public abstract class Creator{
    public abstrat Product factoryMethod();
    
    public void someOpration(){
        //在这里延迟创建了Product
        factorMethod().doSomthing();
    }
}

//ConcreteCreator
public class ConcreteCreator extends Creator{
    @Overrid
    public Product factoryMethod(){
        return new ConcreteProduct();
    }
}

//Product
public interface Product{
   void doSomthing();
}

//public class ConcreteProduct implement Product{
    @Overrid 
    public void doSomthing(){
        System.out.println("ConcreteProduct");
    }
}

下面看看Client怎么使用:

public class Client{
    priavte Creator creator;
    public static void main(String[] args){
        creator = new ConcreteCreator(); //创建符合需求的Creator子类
        creator.someOpration(); //调用这个方法才会创建Product
    }
}

工厂方法模式顺序图

img_e349e750430198e00c97700ae7a40c80.png
工厂方法模式顺序图

结合上面的代码看。

模式优缺点

优势

  • 体现了依赖倒置 的原则,使程序的可扩展性增强,当有新需求时,只需要增加新的Creator子类,替换Client中的子类,而不需要修改其它地方;
  • 可以在不知道对象创建过程未确定的情况下进行编程;
  • 可以很好的链接平行类层次结构。

缺点

  • 工厂类和产品类耦合在一起。

拓展

平行类层次结构

指一个类层级(工厂方法模式中,每个Creator的抽象就代表着一个类层级)中的每一个类,在另一个类层级中都有对应的类与之呼应,这样的一组类层就称为平行类层次结构
解释:
以Shape为例,具体的Shape对象和Shape对象的行为就构成了平行类层次结构。Shape对象层级中有Rectangle、Oval等,在Shape对象行为层级中,有Rectangle、Oval等的面积、周长等行为与之对应。所以它们构成了平行类层次结构。

img_08b056b059ac831a2d371fa29bdef1e3.jpe
CoorChice的公众号
优秀的个人博客,低调大师

微信关注我们

原文链接:https://yq.aliyun.com/articles/656878

转载内容版权归作者及来源网站所有!

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

相关文章

发表评论

资源下载

更多资源
优质分享Android(本站安卓app)

优质分享Android(本站安卓app)

近一个月的开发和优化,本站点的第一个app全新上线。该app采用极致压缩,本体才4.36MB。系统里面做了大量数据访问、缓存优化。方便用户在手机上查看文章。后续会推出HarmonyOS的适配版本。

Mario,低调大师唯一一个Java游戏作品

Mario,低调大师唯一一个Java游戏作品

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

Apache Tomcat7、8、9(Java Web服务器)

Apache Tomcat7、8、9(Java Web服务器)

Tomcat是Apache 软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache、Sun 和其他一些公司及个人共同开发而成。因为Tomcat 技术先进、性能稳定,而且免费,因而深受Java 爱好者的喜爱并得到了部分软件开发商的认可,成为目前比较流行的Web 应用服务器。

Java Development Kit(Java开发工具)

Java Development Kit(Java开发工具)

JDK是 Java 语言的软件开发工具包,主要用于移动设备、嵌入式设备上的java应用程序。JDK是整个java开发的核心,它包含了JAVA的运行环境(JVM+Java系统类库)和JAVA工具。