zoukankan      html  css  js  c++  java
  • java-设计模式-简单工厂,工厂方法,抽象工厂

    一  简单工厂模式

    (把可变化部分封装在工厂类中,当需要增加一种对象,只需要增加产品类,并在工厂中增加创建实体代码,但不符合开闭原则)

    1 工厂类角色:这是本模式的核心,含有一定的商业逻辑和判断逻辑,根据逻辑不同,产生具体的工厂产品。如例子中的PhoneFactory类。
    2 抽象产品角色:它一般是具体产品继承的父类或者实现的接口。由接口或者抽象类来实现。如例中的Iphone接口。
    3 具体产品角色:工厂类所创建的对象就是此角色的实例。在java中由一个具体类实现,如例子中的ApplePhone类,HuaweiPhone

    测试类

    //创建苹果手机
    IPhone phone = PhoneFactory.createPhone(PhoneTypeEnum.APPLE_PHONE);

    二  工厂方法模式

    (工厂类为抽象工厂,具体工厂类继承抽象工厂,创建具体的产品的对象,一个工厂只可以生产一种产品)

    抽象工厂角色: 这是工厂方法模式的核心,它与应用程序无关。是具体工厂角色必须实现的接口或者必须继承的父类。在java中它由抽象类或者接口来实现,如PhoneFactory
    具体工厂角色:它含有和具体业务逻辑有关的代码。由应用程序调用以创建对应的具体产品的对象。在java中它由具体的类来实现,如HuaweiPhoneFactory,ApplePhoneFactory,
    抽象产品角色:它是具体产品继承的父类或者是实现的接口。在java中一般有抽象类或者接口来实现,如Iphone接口
    具体产品角色:具体工厂角色所创建的对象就是此角色的实例。在java中由具体的类来实现,如ApplePhone,HuaweiPhone类

    产品类,复用一中的产品类

    //测试方法

    三 抽象工厂方法

    抽象工厂模式的用意为:给客户端提供一个接口,可以创建多个产品族中的产品对象。
    而且使用抽象工厂模式还要满足一下条件:
    1.系统中有多个产品族(如下文,苹果手机和苹果电池为1个产品族,苹果和华为分别为不同的产品族),而系统一次只可能消费其中一族产品(华为或者苹果)
    2.同属于同一个产品族的产品以其使用。

    来看看抽象工厂模式的各个角色(和工厂方法的如出一辙):

    抽象工厂角色: 这是工厂方法模式的核心,它与应用程序无关。是具体工厂角色必须实现的接口或者必须继承的父类。在java中它由抽象类或者接口来实现,如PhoneFactory,与工方法模式区别为,可以创建多种产品。
    具体工厂角色:它含有和具体业务逻辑有关的代码。由应用程序调用以创建对应的具体产品的对象。在java中它由具体的类来实现,如HuaweiPhoneFactory,ApplePhoneFactory,
    抽象产品角色:它是具体产品继承的父类或者是实现的接口。在java中一般有抽象类或者接口来实现,如IPhone接口,IBattery接口
    具体产品角色:具体工厂角色所创建的对象就是此角色的实例。在java中由具体的类来实现,如ApplePhone,HuaweiPhone类

    //测试方法

    抽象工厂方法的优势

       1当一个产品族中的多个对象被设计成一起工作时,它能保证客户端只使用同一个产品族中的对象。

       2 增加新的具体工厂和产品族很方便,无需修改已有系统,符合开闭原则

      名词解释:

    产品族:相关或相互依赖的对象

    end 

  • 相关阅读:
    第六次上机作业
    NOIP2016 DAY1 T2天天爱跑步
    NOIP2009 T2 Hankson的趣味题
    NOIP2013 DAY2 T3火车运输
    线段树
    NOIP2012 DAY2 T2借教室
    NOIP2015 DAY2 T1跳石头
    NOIP2016 DAY2 T3 愤怒的小鸟
    文本编辑常用快捷键
    洛谷P1516 青蛙的约会
  • 原文地址:https://www.cnblogs.com/hup666/p/10513257.html
Copyright © 2011-2022 走看看