软件设计模式(Design pattern),又称设计模式,是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性、程序的重用性。汇总目录链接:【玩转23种Java设计模式】学习目录汇总整理
一、简介
提供一个创建产品族的接口,其每个子类可以生产一系列相关的产品。
二、实例
实例:创建小米工厂和华为工厂,生产多个产品(手机、电脑、电视......)。
1、手机标准接口(Phone)
public interface Phone {
void make();
}
2、华为手机实现类(HuaWeiPhone)
public class HuaWeiPhone implements Phone {
@Override
public void make() {
System.out.println("make huawei phone");
}
}
3、小米手机实现类(XiaoMiPhone)
public class XiaoMiPhone implements Phone {
@Override
public void make() {
System.out.println("make xiaomi phone");
}
}
4、电脑标准接口(PC)
public interface PC {
void code();
}
5、华为电脑实现类(HuaWeiPC)
public class HuaWeiPC implements PC {
@Override
public void code() {
System.out.println("huawei pc code");
}
}
6、小米电脑实现类(XiaoMiPC)
public class XiaoMiPC implements PC {
@Override
public void code() {
System.out.println("xiaomi pc code");
}
}
7、抽象工厂接口(Factory)
public interface Factory {
Phone makePhone();
PC makePC();
}
8、华为工厂实现类(HuaWeiFactory)
public class HuaWeiFactory implements Factory {
@Override
public Phone makePhone() {
return new HuaWeiPhone();
}
@Override
public PC makePC() {
return new HuaWeiPC();
}
}
9、小米工厂实现类(XiaoMiFactory)
public class XiaoMiFactory implements Factory {
@Override
public Phone makePhone() {
return new XiaoMiPhone();
}
@Override
public PC makePC() {
return new XiaoMiPC();
}
}
10、测试类(Main)
public class Main {
public static void main(String[] args) {
XiaoMiFactory xiaoMiFactory = new XiaoMiFactory();
Phone phone = xiaoMiFactory.makePhone();
phone.call();
PC pc = xiaoMiFactory.makePC();
pc.code();
}
}
控制台输出:
xiaomi phone call
xiaomi pc code
三、总结
1、优点
- 封装性。具体产品在应用层代码隔离,无须关心创建细节。
- 当一个产品族中的多个对象被设计成一起工作时,它能保证客户端始终只使用同一个产品族中的对象。
2、缺点
- 产品族扩展非常困难,要增加一个系列的某一产品,既要在抽象的 Creator 里加代码,又要在具体的里面加代码。
3、应用场景
- QQ 换皮肤,一整套一起换。
- 生成不同操作系统的程序。