zoukankan      html  css  js  c++  java
  • 设计模式_抽象工厂模式


    铺垫

        要知道抽象模式最大的长处必须先了解什么是产品等级和产品族 


    在上面的类图中,两厢车和三厢车称为两个不同的等级结构。而2.0排量车和2.4排量车则称为两个不同的产品族。再详细一点,2.0排量两厢车和2.4排量两厢车属于同一个等级结构,2.0排量三厢车和2.4排量三厢车属于还有一个等级结构;而2.0排量两厢车和2.0排量三厢车属于同一个产品族,2.4排量两厢车和2.4排量三厢车属于还有一个产品族。



    样例
        接着上篇写的女娲造人
    public interface Human {
     public void getColor();
     public void talk();
     public void getSex();
    }
    public abstract class AbstractYellowHuman implements  Human{
    
     public void getColor() {
      System.out.println("黄种人"); 
     }
    
     public void talk() {
      System.out.println("汉语");
     }
    }
    public class MaleYellow extends AbstractYellowHuman {
    
     public void getSex() {
      System.out.println("黄种人男性");
     }
    }

    public class FemaleYellow extends AbstractYellowHuman {
    
     public void getSex() {
      System.out.println("黄种人女性");
     }
    }

    白种人和黑种人都一样。。

    这里就不贴代码了

    public interface HumanFactory {
     public Human createWhiteHuman();
     public Human createBlackHuman();
     public Human createYellowHuman();
    }
    public class FemaleFactory implements HumanFactory {
    
     public Human createBlackHuman() {
      return null;
     }
     public Human createWhiteHuman() {
      return null;
     }
     public Human createYellowHuman() {
      return new FemaleYellow();
     }
    }
    public class MaleFactory implements HumanFactory {
    
     public Human createBlackHuman() {
      return null;
     }
     public Human createWhiteHuman() {
      return null;
     }
     public Human createYellowHuman() {
      return new MaleYellow();
     }
    }
    public class Client {
    
     public static void main(String[] args) {
      HumanFactory factory=new MaleFactory();
      MaleYellow maleYellow=(MaleYellow) factory.createYellowHuman();
      maleYellow.talk();
     }
    }
    /* Human接口   
     * 抽象类白种人AbstractWhiteHuman实现Human接口中俩个方法talk()和getColor(),这样就有了三种人
     * 白种男人 MaleWhiteHuman 继承AbstractWhiteHuman 得到白种男人
     * 白种女人 FemaleWhiteHuman 继承AbstractWhiteHuman得到白种女人
     * 至于工厂就能够自己DIY了
     * */


    长处 
        可是能够满足多个等级结构,比如买牛奶和咖啡,再加上一个条件大杯还是小杯。

    缺点
        很难以扩展

    适用场景

           当须要创建的对象是一系列相互关联或相互依赖的产品族时,便能够使用抽象工厂模式。说的更明确一点,就是一个继承体系中,假设存在着多个等级结构(即存在着多个抽象类)。而且分属各个等级结构中的实现类之间存在着一定的关联或者约束,就能够使用抽象工厂模式。

    假如各个等级结构中的实现类之间不存在关联或约束,则使用多个独立的工厂来对产品进行创建。则更合适一点。

    我是菜鸟,我在路上。

  • 相关阅读:
    WebDAV
    招牌老鸭汤(图)-张生记(双菱店)-杭州-大众点评网
    How to install and use Headless Chrome on OSX | Object Partners
    k8s的yaml说明
    config-server-bus动态更新配置
    springboot~maven集成开发里的docker构建
    vue~环境搭建
    logback日志文件位置动态指定
    HDU 4649 Professor Tian(反状态压缩dp,概率)
    android 内部存储 安装apk
  • 原文地址:https://www.cnblogs.com/yjbjingcha/p/8401370.html
Copyright © 2011-2022 走看看