java设计模式 GOF23 02 工厂模式

package com.lz.factory.simpleFactory;

/*
 * 
 * 补充:面向对象基本原则
 * OCP:(开闭原则)添加新功能不应该修改原有代码,而是添加新的类
 * DIP:(依赖倒转原则)依赖接口编程
 * LOD:(迪米特法则)降低耦合,只和必要的对象通信
 * 静态工厂类 {
 * 创建者和调用者的分离
 * 
 * 简单工厂问题:添加新功能需要修改代码
 * }
 * 工厂方法类{
 * 代码过多
 * }
 * 两者比较
 * 简单工厂结构代码更简单
 * 工厂方法更难维护
 * 总结:工厂方法模式符合理论要求但是实际使用时更多选择简单工厂模式
 * 
 */
public class SimpleFactory {
    public static Car createCar(String msg) {
        if ( msg.equals("jeep")) {
            return new Jeep();
        } else if ( msg.equals("bmw")) {
            return new Bmw();
        } else {
            return null;
        }
    }
}

 

package com.lz.factory.simpleFactory;
/*
 * 汽车接口 
 */
public interface Car {
    public void run();
}
package com.lz.factory.simpleFactory;

public class Bmw implements Car{
    @Override
    public void run() {
        System.out.println("I am BWM");
    }
}
package com.lz.factory.simpleFactory;

public class Jeep implements Car{

    @Override
    public void run() {
        System.out.println("I am Jeep");
    }

}
package com.lz.factory.simpleFactory;

public class Test01 {
    public static void main(String[] args) {
        Car bmw = new Bmw();
        Car jeep = new Jeep();
        bmw.run();
        jeep.run();
        Car bmw1 = SimpleFactory.createCar("bmw");
        Car jeep1 = SimpleFactory.createCar("jeep");
        bmw1.run();
        jeep1.run();
    }
}

工厂方法类:

每一个类添加一个工厂方法

package com.lz.factory.factoryMethod;

/*
 * 定义接口
 * 添加功能时只需要添加新的类
 * 缺点代码太多没有简单工厂类简单
 */
public interface CarFactory {
    Car createCar();
}

 

你可能感兴趣的:(java设计模式 GOF23 02 工厂模式)