GOF23的一些总结(二)

来源:互联网 发布:阿里大数据平台 编辑:程序博客网 时间:2024/05/20 23:05

二、工厂模式 ,实现了创建者和调用者的分离。
详细分类:简单工厂模式,工厂方法模式,抽象工厂模式
面向对象的基本原则:
OCP(开闭原则):一个软件实体应当对扩展开放,对修改关闭。
DIP(依赖倒转原则):要针对接口编程,不要针对实现编程。
LOD(迪米特法则):只与你直接的朋友通信,而避免和陌生人通信。
核心作用:实例化对象,用工厂方法代替new操作。将选择实现类、创建对象统一管理和控制。从而将调用者跟我们的实现类解耦。
工厂模式:
简单工厂模式:用来生产同一等级结构中的任意产品。(对于增加新的产品,需要修改已经有的代码)
工厂方法模式:用来生产同一等级结构中的固定产品。(支持增加任意产品)
抽象工厂模式:用来生产不同产品族的全部产品。(对于增加新的产品,无能为力;支持增加产品族)没有工厂模式时候的关系
//简单工厂

public class CarFactory{    publics tatic Car createCar(String type){        if("奥迪".equals(type)){            return new Audi();        }else if("比亚迪".equals(type)){            return new Byd();        }else{            return null;        }    }}

简单工厂后的类
简单工厂的另外一种实现方式

public class CarFactory{    public static Car createAudi(){        return new Audi();    }    public static Car createByd(){        return new Byd();    }}

要点:简单工厂模式也叫静态工厂模式,工厂类一般使用静态方法,不修改代码的话,无法扩展。
//实现工厂方法模式(1)

public interface CarFactory{    Car createrCar();}

实现工厂方法模式(2)

public class AudiFactory implements CarFactory{    @Override    public Car createCar(){        return new Audi();    }}

要点:扩展的时候更符合OCP原则,只需要添加一个实体类和添加一个新的工厂方法。
简单工厂模式的类图
理论和实践总是有差距的
//抽象工厂模式
用来生产不同产品族的全部产品。(对于增加新的产品,无能为力;支持增加产品族)
抽象工厂模式是工厂方法模式的升级版本,存在多个业务品种,业务分类时,通过抽象工厂模式生产需要的对象是一种非常好的解决方式。
这里写图片描述

public interface Engine{    void run();    void start();}
public class LuxuryEngine implements Engin{    @Override    public void run(){        System.out.println("转得快!");    }    @Override    public void start(){        System.out.println("启动快!可以自动启停");    }}
public class LowerEngine implements Engin{    @Override    public void run(){        System.out.println("转得慢!");    }    @Override    public void start(){        System.out.println("启动慢!");    }}
public interface Seat{    void massage();}
public class LuxurySeat implements Seat{    @Override    public void massage(){        System.out.println("可以按摩,座垫加热!");    }}
public class LowerSeat implements Seat{    @Override    public void massage(){        System.out.println("普通座垫!");    }}
public interface Tyre{    void revolve();}
public class LuxuryTyre implements Tyre{    @Override    public void revolve(){        System.out.println("旋转磨损慢");    }}
public class LowerTyre implements Tyre{    @Override    public void revolve(){        System.out.println("旋转磨损快");    }}

抽象工厂接口

public interface CarFactory{    Engine createEngine();    Seat createSeat();    Tyre createTyre();}

具体的工厂

public class LuxuryCarFactory implements CarFactory{    @Override    public Engine createEngine(){        return new LuxuryEngine();    }    @Override    public Seat createSeat(){        return new LuxurySeat();    }    @Override    public Tyre createTyre(){        return new LuxuryTyre();    }}   
public class LowerCarFactory implements CarFactory{    @Override    public Engine createEngine(){        return new LowerEngine();    }    @Override    public Seat createSeat(){        return new LowerSeat();    }    @Override    public Tyre createTyre(){        return new LowerTyre();    }}   
0 0
原创粉丝点击