工厂设计模式

简单工厂模式

在创建一个对象时不向客户暴露内部细节,并提供一个创建对象的通用接口。

简单工厂把实例化的操作单独放到一个类中,这个类就成为简单工厂类,让简单工厂类来决定应该用哪个具体子类来实例化。

这样做能把客户类和具体子类的实现解耦,客户类不再需要知道有哪些子类以及应当实例化哪个子类。客户类往往有多个,如果不使用简单工厂,那么所有的客户类都要知道所有子类的细节。而且一旦子类发生改变,例如增加子类,那么所有的客户类都要进行修改。

简记: 一个工厂接口,一个工厂类,多个具体商品类
  • 电脑接口
public interface Computer {
    void printComputer();
}
  • 具体电脑类一
public class AppleBook implements Computer {
    public void printComputer() {
        System.out.println("Apple Book");
    }
}
  • 具体电脑二
public class MacBook implements Computer {
    public void printComputer() {
        System.out.println("Mac Book");
    }
}
  • 电脑工厂类
public class ComputerFactory {
    public static Computer newInstance(String name){
        Computer instance = null;
        if(name.equals("AppleBook")){
            instance = new AppleBook();
        }else if(name.equals("MacBook")){
            instance = new MacBook();
        }
        return instance;
    }
}

缺点:多个不同的商品,在同一个工厂中,相互之间存在细节暴露的问题。

工厂方法设计模式

改进简单工厂的缺点,提供多个工厂类,屏蔽不同商品间的细节。

  • 抽象工厂类
public abstract class ComputerFactory {
    public abstract void productComputer();
}

  • 具体工厂类1
public class AppleFactory extends ComputerFactory {
    public void productComputer() {
        System.out.println("生产一台apple电脑");
    }
}
  • 具体工厂类2
public class MaxFactory extends ComputerFactory{
    public void productComputer() {
        System.out.println("生产一台max电脑");
    }
}
抽象工厂设计模式

提供一个接口,用于创建 相关的对象家族 。本质上和工厂方法设计模式一样,可以理解为此时同一牌子的电脑有很多型号。然后每次创建对象的时候,都可以创建同一牌子的不同型号的多个电脑。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值