设计模式-工厂

来源:互联网 发布:java工程师刚入职 编辑:程序博客网 时间:2024/06/01 14:10

通用类:

public interface Car {    void run();}public class Benz implements Car {    @Override    public void run() {        System.out.println("Benz is Running");    }}public class Audi implements Car {    @Override    public void run() {        System.out.println("Audi is Running");    }}

1.简单工厂(不符合ocp原则 开闭原则)

/** * @author Administrator * 简单汽车工厂 */public class CarFactory {    public static Car createCar(String type){        if("audi".equals(type)){            return new Audi();        }else if ("benz".equals(type)) {            return new Benz();        }else {            return null;        }    }}public class CarFactor02 {    public static Car createAudi(){        return new Audi();    }    public static Car createBenz(){        return new Benz();    }}//客户端调用public class Client {    public static void main(String[] args) {        Car audi=CarFactory.createCar("audi");        Car benz=CarFactory.createCar("benz");        audi.run();        benz.run();    Car audi02=CarFactor02.createAudi();    Car benz02=CarFactor02.createBenz();    audi02.run();    benz02.run();    }}

2.工厂方法模式(符合ocp原则,拓展较复杂):在不修改已有类的前提下,通过增加新的工厂类实现拓展

//工厂接口public interface CarFactory {    Car createCar();}//具体工厂public class AudiFactory implements CarFactory {    @Override    public Car createCar() {        return new Audi();    }}public class BenzFactory implements CarFactory {    @Override    public Car createCar() {        return new Benz();    }}//客户端调用代码public class Client {    public static void main(String[] args) {        Car audi=new AudiFactory().createCar();        Car benz=new BenzFactory().createCar();        audi.run();        benz.run();    }}

总结:根据设计理论建议使用工厂方法模式,但实际开发使用简单工厂模式
3.抽象工厂模式:用来生产不同产品族的全部产品。(对于增加新的单个产品无能为力,支持增加新的产品族)
这里写图片描述

//组件1public interface Engine {    void run();    void start();}class LuxuryEngine implements Engine{    @Override    public void run() {        System.out.println("跑的快");    }    @Override    public void start() {        System.out.println("启动快");    }}class LowEngine implements Engine{    @Override    public void run() {        System.out.println("跑的慢");    }    @Override    public void start() {        System.out.println("启动慢");    }}//组件2public interface Seat {    void massage();}class LuxurySeat implements Seat{    @Override    public void massage() {        System.out.println("高端按摩");    }}class LowSeat implements Seat{    @Override    public void massage() {        System.out.println("无按摩");    }}//组件3public interface Tyre {    void resolve();}class LuxuryTyre implements Tyre{    @Override    public void resolve() {        System.out.println("磨损慢");    }}class LowTyre implements Tyre{    @Override    public void resolve() {        System.out.println("磨损快");    }}//工厂public interface CarFactory {    Engine createEngine();    Tyre createTyre();    Seat createSeat();}class LuxuryFactory implements CarFactory{    @Override    public Engine createEngine() {        return new LuxuryEngine();    }    @Override    public Tyre createTyre() {        return new LuxuryTyre();    }    @Override    public Seat createSeat() {        return new LuxurySeat();    }}class LowFactory implements CarFactory{    @Override    public Engine createEngine() {        return new LowEngine();    }    @Override    public Tyre createTyre() {        return new LowTyre();    }    @Override    public Seat createSeat() {        return new LowSeat();    }}

应用场景:
-JDK中的Calendar中的getInstance方法
-JDBC中的Connection对象的获取
-Hibernate中SessionFactory创建session
-spring中容器创建管理Bean对象
-XML解析时的DocumentBuilderFactory创建解析对象
-反射中Class对象的newInstance方法

0 0