设计模式的总结二:创造型模式-抽象工厂模式

来源:互联网 发布:邮政网络培训学院登录 编辑:程序博客网 时间:2024/06/06 18:01

一:创造型模式的理解:

    1.抽象工厂模式

      抽象工厂模式是是相比工厂方法模式抽象层次更高。抽象工厂返回的是一组类的工厂,然后每个工厂能生产一类产品(有的书上称之为产品族,类似可以把公司抽象成的工厂,谷歌就是这个工厂的子类,苹果也是这个工厂的子类。谷歌有搜索引擎,安卓,地图等产品,苹果有手机,ipad和mac等产品。类比的看都是一种抽象工厂模式的实例)。

    同工厂方法模式类似(工厂方法模式就是返回多个子类中的一个),抽象工厂模式能够返回一个工厂,一个工厂就能返回多个子类中的一个。

    可以说工厂模式是创造型模式的典型示例,抽象公共模式是工厂方法模式的扩展,允许创建更多类型的对象。

   具体类包括:

  抽象工厂:声明一个用于完成抽象产品对象创建操作的接口。

  具体工厂:实现创建具体产品对象的操作。

  抽象产品:声明一个用于一类产品对象的接口。

  具体产品:定义相应的具体工厂来创建的产品对象。 

  客户端:使用抽象工厂创建特定产品的工厂,生成特定的产品。

2.抽象工厂带来的优势:

  客户端和具体的产品类之间彻底解耦,这是抽象工厂模式最主要的好处之一。我们可以很轻松的添加一类产品,只需要实现这类产品的工厂和定义这类产品就行。

  3.代码实现:

 

public class Part {    public String name;    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }}... ...public abstract class Car {    //定义的一个抽象工厂类    public String name = "Car";    abstract Part getWheels();    abstract Part getEngines();    abstract Part getBody();    public void show(){        System.out.println("-------------------------------------------");        System.out.println("Car name:" + name);        System.out.println("wheels:" + getWheels().getName());        System.out.println("engines:" + getEngines().getName());        System.out.println("body:" + getBody().getName());        System.out.println("-------------------------------------------");    }}... ...public class BenzCar extends Car {    //抽象工厂类的子类   private String name = "BenzCar";    public BenzCar(String name){        this.name = name;    }    @Override    Part getWheels() {        Part part = new Part();        part.setName(name + " Wheels");        return part;    }    @Override    Part getEngines() {        Part part = new Part();        part.setName(name + " Engines");        return part;    }    @Override    Part getBody() {        Part part = new Part();        part.setName(name+ "  Body" );        return part;    }}... ...public class BmwCar extends Car {    //抽象工厂类的子类    private String name = "BmwCar";    public BmwCar(String name){        this.name = name;    }    @Override    Part getWheels() {        Part part = new Part();        part.setName(name + " Wheels");        return part;    }    @Override    Part getEngines() {        Part part = new Part();        part.setName(name + " Engines");        return part;    }    @Override    Part getBody() {        Part part = new Part();        part.setName(name + "  Body");        return part;    }}... ...    public static void main(String[] args){        //客户端上 创建一个宝马的车       Car bmwCar = new BmwCar("BmwCar");       bmwCar.show();        //再添加一个奔驰的车 只要添加相应的类就可以了,client可以很简洁       Car benzCar = new BenzCar("BenzCar");        benzCar.show();    }


原创粉丝点击