`

设计模式(6)- 抽象工厂模式

阅读更多

抽象工厂模式

1.定义

       提供一个创建一系列相关或者相互依赖对象的接口,而无需指定它们具体的类。

2.示例代码

       比如组装机器的时候,cpu和主板可以看作两个对象,这两个对象相互依赖,cpu针脚必须和主板针槽相匹配。

    

/*cpu接口定义*/
public interface CPUApi{
    //示意方法,cpu具有运算功能
    public void calculate();
}

/*intel CPU实现*/
public class IntelCPU implements CPUApi{
     //CPU针脚数目
     private int pins = 0;
     //构造方法传入针脚数
     public IntelCPU(int pins){
         this.pins = pins;
     }
     public void calculate(){
          System.out.pringln("now in Intel CPU,pins = " + pins);
     }
}

/*AMD CPU实现*/
public class AMDCPU implements CPUApi{
     //CPU针脚数目
     private int pins = 0;
     //构造方法传入针脚数
     public AMDCPU(int pins){
         this.pins = pins;
     }
     public void calculate(){
          System.out.pringln("now in AMD CPU,pins = " + pins);
     }
}

   

/*主板接口*/
public interface MainboardApi{
    //示意方法,主板具有安装cpu功能
    public void installCPU();
}

/*技嘉主板实现*/
public class GAMainboard implements MainboardApi{
    //cpu 针槽孔数
    private int cpuHoles = 0;
    //构造方法传入cpu针槽孔数
    public GAMainboard(int cpuHoles){
        this.cpuHoles = cpuHoles;
    }
    public void installCPU(){
        System.out.println("now in GAMainboard,cupHoles = " + cpuHoles);
    }
}

/*微星主板实现*/
public class MSIMainboard implements MainboardApi{
    //cpu 针槽孔数
    private int cpuHoles = 0;
    //构造方法传入cpu针槽孔数
    public MSIMainboard(int cpuHoles){
        this.cpuHoles = cpuHoles;
    }
    public void installCPU(){
        System.out.println("now in MSIMainboard,cupHoles = " + cpuHoles);
    }
}

   

/*抽象工厂接口,声明创建抽象产品对象的操作*/
public interface AbstractFactory{
    //创建cpu对象
    public CPUApi createCPUApi();
    //创建主板对象
    public MainboardApi createMainboardApi();
}

/*抽象工厂的实现,具体的装机方案1:方案对象 Intel的CPU + 技嘉的主板*/
public class Schema1 implements AbstractFactory{
   //创建Intel的cpu对象
    public CPUApi createCPUApi(){
        return new IntelCUP(1156);
    }
    //创建技嘉主板对象
    public MainboardApi createMainboardApi(){
        return new GMMainboard(1156);
    }
}

/*抽象工厂的实现,具体的装机方案2:方案对象 AMD的CPU + 微星的主板*/
public class Schema2 implements AbstractFactory{
   //创建AMD的cpu对象
    public CPUApi createCPUApi(){
        return new AMDCUP(939);
    }
    //创建技嘉主板对象
    public MainboardApi createMainboardApi(){
        return new MSIMainboard(939);
    }
}

   

/*装机工程师类*/
public class ComputerEngineer{
    //定义组装电脑需要的cpu
    private CPUApi cpu = null;
    //定义所需要的主板
    private MainboardApi  mainboard = null;
    //装机过程,客户选择的装机方案
    public void makeComputer(AbstractFactory schema){
         //准备装机所需配件
         prepareHardwares(schema);
    } 
    //装机所需配件,客户选择的装机方案
    private void prepareHardwares(AbstractFactory schema){
         this.cpu = schema.createCPUApi();
         this.mainboard = schema.createMainboardApi();
         //测试配件是否匹配
         this.cpu.calculate();
         this.mainboard.installCPU();
    }
}

   

/*客户组装机器*/
public class Client{
    public static void main(String args[]){
       //创建装机工程师对象
       ComputerEngineer engineer = new  ComputerEngineer();
       //客户选择并创建需要使用的装机方案对象
       AbstractFactory schema = new Schema1();
       //告诉装机工程师所选的方案
       engineer.makeComputer(schema);
    }
}

 

    

    3.实际应用

       抽象工厂的功能是为一系列相关对象或相互依赖的对象创建的一个接口,需要注意的是这个接口内的方法不是任意堆砌的,而是一系列相关或相互依赖的方法,抽象工厂其实是一个产品系列或者是产品簇。抽象工厂的优点是分离接口和实现,缺点是容易造成类层次复杂,不容易扩展新的产品。

 

抽象工厂模式的本质:选择产品簇实现
分享到:
评论

相关推荐

    设计模式--抽象工厂模式实现多数据库连接

    抽象工厂模式是设计模式中的一种创建型模式,它提供了一个创建对象族的接口,而无需指定它们的具体类。在.NET开发中,这种模式常用于实现多数据库连接,比如连接到MySQL、SQL Server或Oracle等不同的数据库系统。...

    java设计模式----抽象工厂模式

    java设计模式----抽象工厂模式,简单工厂模式代码 代码内部

    设计模式---抽象工厂模式(Abstract Factory)-UML图 (StarUML)

    设计模式---抽象工厂模式(Abstract Factory)-UML图 (StarUML)

    设计模式--抽象工厂

    抽象工厂模式通常由以下几个角色构成: 1. **抽象工厂(Abstract Factory)**:定义一个创建一系列相关或相互依赖对象的接口,而无需指定它们的具体类。在不同的实现中,这个接口会创建出不同系列的产品。 2. **...

    设计模式之-抽象工厂-AbstractFactory

    抽象工厂模式可以帮助我们创建一个工厂接口,该接口声明了创建这些组件的方法,然后为每种操作系统实现一个具体的工厂类。 ```java // 抽象工厂接口 public interface GUIFactory { Button createButton(); ...

    设计模式 - 抽象工厂模式

    设计模式 - 抽象工厂模式 抽象工厂模式是一种创建型设计模式,它提供了一种方式来创建一组相关或相互依赖的对象,而不需要指定具体的类。该模式允许客户端使用抽象的接口来创建一组相关的产品,而不需要关系实际...

    设计模式-抽象工厂模式(讲解及其实现代码)

    抽象工厂模式是设计模式中的一种创建型模式,它提供了一种创建对象集合的接口,而无需指定具体的类。这种模式允许系统独立于如何创建、组合和表示产品对象的细节进行设计,为产品族(一组相关或相互依赖的对象)提供...

    设计模式-抽象工厂模式

    抽象工厂模式是设计模式中的一种创建型模式,它提供了一种创建对象族的接口,而无需指定其具体的类。这种模式的关键在于“族”,即一系列相关的对象。在抽象工厂模式中,我们创建一个抽象工厂接口,然后为每一种具体...

    创建型设计模式----抽象工厂模式

    抽象工厂模式是创建型设计模式的一种,它提供了一种创建对象族(一组具有相互依赖关系的对象)的方法,而无需指定具体类。这种模式的核心在于它允许客户端代码与具体实现细节解耦,使得更换一个产品族变得更为容易。...

    简单工厂模式-工厂方法模式-抽象工厂模式

    在软件设计模式中,工厂模式是一组非常基础且实用的设计模式,主要分为简单工厂模式、工厂方法模式和抽象工厂模式。这些模式都是为了解决对象创建的问题,通过封装对象的创建过程,使得代码更加灵活,易于扩展和维护...

    设计模式--抽象工厂之小解

    在Java中,`java.sql`包中的`DriverManager`类可以看作是抽象工厂,它提供了获取不同数据库连接的接口,而具体的数据库连接(如MySQL、Oracle等)则由各自的`Driver`类实现,这就是一个抽象工厂模式的实际应用。...

    设计模式----抽象工厂模式

    抽象工厂模式是设计模式中的一种创建型模式,它提供了一种创建对象族的接口,而无需指定具体的类。这种模式允许客户端使用一个通用接口来创建一组相关或相互依赖的对象,而无需了解它们的具体实现。在Java或其他面向...

    java设计模式-抽象工厂模式

    抽象工厂模式是设计模式中的一种,它属于创建型模式,主要解决的是当系统有多个产品族,而每个产品族又有多个具体产品时,如何组织代码的问题。在Java中,抽象工厂模式提供了一种创建对象组的方式,使得这些对象属于...

    java常用设计模式-抽象工厂模式

    java常用设计模式-抽象工厂模式 抽象工厂模式(Abstract Factory Pattern)是一种创建型设计模式,它通过定义一个创建对象的接口来创建对象,但将具体实现的决定留给子类来决定。在抽象工厂模式中,接口是负责创建...

    设计模式举例-抽象工厂模式(有图有真相)

    抽象工厂模式是设计模式中的一种创建型模式,它提供了一种创建对象集合的接口,而无需指定具体类。这种模式的关键在于,它允许客户端代码在不关心具体实现的情况下,能够创建一系列相关的对象,同时保持了良好的封装...

    设计模式习题答案-抽象工厂、生成器.ppt

    设计模式习题答案-抽象工厂、生成器.ppt

    设计模式-抽象工厂模式javademo

    抽象工厂模式是软件设计模式中的一种创建型模式,它提供了一种创建对象族(一组具有相互依赖关系的对象)的方法,而无需指定它们的具体类。在Java编程中,抽象工厂模式通常用于实现跨平台或者跨框架的接口,使得系统...

    设计模式专题之(三)抽象工厂模式---设计模式抽象工厂模式示例代码(python--c++)

    设计模式专题之(三)抽象工厂模式---设计模式抽象工厂模式示例代码(python--c++)

    PHP5设计模式-抽象工厂模式实现

    PHP实现的抽象工厂模式,大家可以下载来参考学习下。

    设计模式学习-抽象工厂模式

    **抽象工厂模式**是设计模式中的结构型模式之一,它提供了一种创建对象族的方式,这些对象属于同一族,它们相互之间存在特定的关系和依赖。抽象工厂模式的主要目的是隔离产品对象的创建和使用,使得更换产品族或者...

Global site tag (gtag.js) - Google Analytics