工厂模式:
实现了创建者和调用者的分离
详细分类:
简单工厂模式
工厂方法模式
抽象工厂模式
面向对象设计的基本原则:
OCP(开闭原则,Open-Closed Principle):一个软件的实体应当对扩展开发,对修改关闭
DIP(依赖倒转原则,Dependence Inversion Principle):要针对接口编程,不要针对实现编程
LOD(迪米特法则,Law of Demeter):只与你直接的朋友通信,而避免与陌生人通信
简单工厂模式:
简单工厂模式也叫静态工厂模式,就是工厂类一般是使用静态方法,通过接受的参数不同来返回不同的对象实例
缺点:对于增加新产品无能为力!不修改代码的话,是无法扩展的
public interface Car {
public void run();
}
public class Audi implements Car{
@Override
public void run() {
System.out.println("audi is running !");
}
}
public class Baoma implements Car{
@Override
public void run() {
System.out.println("baoma is running !");
}
}
public class SimpleFactory {
public static void createAuti(){
Car c = new Audi();
c.run();
}
public static void createBaoma(){
Car c = new Baoma();
c.run();
}
}
public class Client {
public static void main(String[] args) {
Car c1 = new Audi();
Car c2 = new Baoma();
c1.run();
c2.run();
//简单工厂模式,访问的类少 调用起来方便
SimpleFactory.createAuti();
SimpleFactory.createBaoma();
}
}
工厂方法模式
为了避免简单工厂模式的缺点,不完全满足OCP
工厂方法模式和简单方法模式最大的区别就是,简单工厂模式只有一个工厂类,而工厂方法模式有一组实现了相同接口的工厂类
工厂方法模式将上述的SimpleFactory 类变为一个接口,定义一个创建Car的抽象方法,然后由具体的品牌车趋去实现这个接口,重写这个方法,去创建Car,这样做方便扩展,扩展不用修改原来的工厂类,只需要实现接口即可
两者的比较
结构复杂度:
简单工厂占优势,简单工厂模式只需要一个工厂类,而工厂方法模式的工厂l类随着产品数量的增加而增加,无疑使类的个数越来越多,增加了结构复杂度
代码复杂度:
代码复杂度和结构复杂度是一对矛盾,所以简单工厂类的的代码复杂度大于工厂方法模式
客户端编程难度:
工厂方法模式在客户端需要对工厂类进行实例化,而简单工厂模式的工厂类是一个静态类,直接调用静态方法即可,所以简单工厂模式略胜一筹
管理上的难度:
实际上,我们一般都用简单工厂模式
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)