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