zoukankan      html  css  js  c++  java
  • 设计模式(4)--AbstractFactory(抽象工厂模式)--创建型

    1.模式定义:

      抽象工厂是应对产品族概念的,提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们的具体类

    2.模式特点:

      抽象工厂模式为创建一组对象提供了一种解决方案。与工厂方法模式相比,抽象工厂模式中的具体工厂不只是创建一种产品,它负责创建一族产品;

    3.使用场景:

      为创建一组对象提供了一种解决方案;

    4.模式实现:

      (1)抽象工厂角色:

       这是工厂方法模式的核心,它与应用程序无关。是具体工厂角色必须实现的接口或者必须继承的父类。在java中它由抽象类或者接口来实现。
    //发动机以及型号    
    public interface Engine {    
    }    
    public class EngineA extends Engine{    
        public EngineA(){    
            System.out.println("制造-->EngineA");    
        }    
    }    
    public class EngineBextends Engine{    
        public EngineB(){    
            System.out.println("制造-->EngineB");    
        }    
    }    
     
    //空调以及型号    
    public interface Aircondition {    
    }    
    public class AirconditionA extends Aircondition{    
        public AirconditionA(){    
            System.out.println("制造-->AirconditionA");    
        }    }    
    public class AirconditionB extends Aircondition{    
        public AirconditionB(){    
            System.out.println("制造-->AirconditionB"); 
        }
    }   

      (2)具体工厂角色:

      它含有和具体业务逻辑有关的代码。由应用程序调用以创建对应的具体产品的对象。在java中它由具体的类来实现。
    //创建工厂的接口    
    public interface AbstractFactory {    
        //制造发动机  
        public Engine createEngine();  
        //制造空调   
        public Aircondition createAircondition();   
    }   

      (3)抽象产品角色:

      它是具体产品继承的父类或者是实现的接口。在java中一般有抽象类或者接口来实现。
    //为宝马320系列生产配件    
    public class FactoryBMW320 implements AbstractFactory{    
        @Override    
        public Engine createEngine() {      
            return new EngineA();    
        }    
        @Override    
        public Aircondition createAircondition() {    
            return new AirconditionA();    
        }    
    }    
    //宝马523系列  
    public class FactoryBMW523 implements AbstractFactory {    
         @Override    
        public Engine createEngine() {      
            return new EngineB();    
        }    
        @Override    
        public Aircondition createAircondition() {    
            return new AirconditionB();    
        }    
    }   

      (4)具体产品角色:

      具体工厂角色所创建的对象就是此角色的实例。在java中由具体的类来实现。
    public class Customer {    
        public static void main(String[] args){    
            //生产宝马320系列配件  
            FactoryBMW320 factoryBMW320 = new FactoryBMW320();    
            factoryBMW320.createEngine();  
            factoryBMW320.createAircondition();  
                
            //生产宝马523系列配件    
            FactoryBMW523 factoryBMW523 = new FactoryBMW523();    
            factoryBMW320.createEngine();  
            factoryBMW320.createAircondition();  
        }    
    }  

    5.优缺点:

      (1)抽象工厂模式优点:

       [1]分离接口和实现:客户端使用抽象工厂来创建需要的对象,而客户端根本就不知道具体的实现是谁,客户端只是面向产品的接口编程而已。也就是说,客户端从具体的产品实现中解耦;
       [2]使切换产品族变得容易:因为一个具体的工厂实现代表的是一个产品族.
          [3]向客户端提供一个接口,使得客户端在不必指定产品具体类型的情况下,创建多个产品族中的产品对象 

      (2)抽象工厂模式缺点:

        不太容易扩展新的产品:如果需要给整个产品族添加一个新的产品,那么就需要修改抽象工厂,这样就会导致修改所有的工厂实现类;
  • 相关阅读:
    Android编译选项eng、user、userdebug的区别
    Linux 内核编码规范
    PLM之EVT、DVT、PVT、MP
    fastboot刷机的一般方法
    Android手机拨号测试项
    使用Genymotion安装APK出现错误INSTALL_FAILED_CPU_ABI_INCOMPATIBLE的解决办法
    三星手机列表拖动时出现诡异背景色的问题
    分享android ADT百度云盘下载地址
    关于互联网思维
    分享Nginx在Windows下的管理命令(bat文件)
  • 原文地址:https://www.cnblogs.com/yysbolg/p/7410567.html
Copyright © 2011-2022 走看看