设计模式(二) ---- 工厂模式
2016-06-30 00:00
218 查看
摘要: 设计模式就是一套被反复使用的,多数人知晓的,经过分类,编目的代码设计经验的总结,本系列分篇总结下各个设计模式
优点:
1、将创建实例的工作与使用实例的工作分开
2、把初始化实例时的工作放到工厂里进行,使代码更容易维护。
3、使得修改代码时不会引起太大的变动,良好的扩展性。
//创建一个共同的接口 -- 键盘
[b]public[/b] [b]interface[/b] Keyboard {
[b]public[/b] [b]void[/b] makeKeyboard();
}
2.创建实现类
实现类1:Razer
[b]public[/b] [b]class[/b] Razer [b]implements[/b] Keyboard{
//实现方法
[b]public[/b] [b]void[/b] makeKeyboard() {
System.out.println("制造了雷蛇键盘");
}
}
实现类2:Logitech
[b]public[/b] [b]class[/b] Logitech [b]implements[/b] Keyboard{
[b]public[/b] [b]void[/b] makeKeyboard() {
System.out.println("制造了罗技键盘");
}
}
3.创建工厂类
[b]public[/b] [b]class[/b] KeyboardFactory {
//根据传进的类型进行创建不同类型的实例
[b]public[/b] Keyboard makeKeyBoard(String type) {
[b]if[/b] ("Razer".equals(type)) {
[b]return[/b] [b]new[/b] Razer();
}
[b]if[/b] ("Logitech".equals(type)) {
[b]return[/b] [b]new[/b] Logitech();
}
[b]return[/b] [b]null[/b];
}
}
4.测试
[b]public[/b] [b]class[/b] TestDemo {
[b]public[/b] [b]static[/b] [b]void[/b] main(String[] args) {
KeyboardFactory factory = [b]new[/b] KeyboardFactory();
Keyboard keyBoard = factory.makeKeyBoard("Razer");
//存在此类型的键盘就制造
[b]if[/b] (keyBoard != [b]null[/b]) {
keyBoard.makeKeyboard();
}[b]else[/b] {
System.out.println("没有此类型的键盘");
}
}
}
一个抽象产品类,可以派生出多个具体产品类
一个具体工厂类创建过个产品类
[b]缺点:每添加一中类型的键盘,就得修改工厂类,违反闭包原则,扩展时不应修改原有类的内部代码[/b]
[b]一个抽象产品类[/b][b],可以派生出多个具体的产品类[/b]:显示器下有不同牌子的显示器
[b]一个抽象工厂类,可以派生出多个具体的工厂类[/b]:显示器工厂类下有不同显示器的工厂类
[b]一个工厂类只能创建一个具体的产品类实例[/b]:每个显示器工厂类只能创建自己牌子的显示器
代码的Display系列
[b]多个抽象产品类[/b][b],每个产品类可以派生出多个具体的产品类[/b]
[b]一个抽象工厂类,可以派生出多个具体的工厂类[/b]
[b]每个具体的工厂类可以创建出多个具体的产品,就是创建一个产品线下的多个产品[/b]
[b]代码的pc系列[/b]
[b]总结:[/b]
工厂方法模式和抽象工厂模式对比
工厂模式是一种极端情况下的抽象工厂模式,可以将抽象工厂模式看做是工厂模式的扩展和升级
工厂模式用来创建一个产品的等级结构,抽象工厂模式是创建多个产品的等级结构
工厂模式只有一个抽象产品类,而抽象工厂模式有多个抽象产品类
工厂模式的优点:
系统可以在不修改具体工厂角色的情况下引进新产品
客户端不必关心对象如何创建,明确了职责
更好的理解面向对象的原则,面向接口编程,二不是面向实现编程
[b]工厂模式[/b]
工厂模式是我们最常用的实例化对象模式了,是用工厂方法代替new操作的一种模式。优点:
1、将创建实例的工作与使用实例的工作分开
2、把初始化实例时的工作放到工厂里进行,使代码更容易维护。
3、使得修改代码时不会引起太大的变动,良好的扩展性。
[b]简单工厂模式[/b]
1.创建共同的接口//创建一个共同的接口 -- 键盘
[b]public[/b] [b]interface[/b] Keyboard {
[b]public[/b] [b]void[/b] makeKeyboard();
}
2.创建实现类
实现类1:Razer
[b]public[/b] [b]class[/b] Razer [b]implements[/b] Keyboard{
//实现方法
[b]public[/b] [b]void[/b] makeKeyboard() {
System.out.println("制造了雷蛇键盘");
}
}
实现类2:Logitech
[b]public[/b] [b]class[/b] Logitech [b]implements[/b] Keyboard{
[b]public[/b] [b]void[/b] makeKeyboard() {
System.out.println("制造了罗技键盘");
}
}
3.创建工厂类
[b]public[/b] [b]class[/b] KeyboardFactory {
//根据传进的类型进行创建不同类型的实例
[b]public[/b] Keyboard makeKeyBoard(String type) {
[b]if[/b] ("Razer".equals(type)) {
[b]return[/b] [b]new[/b] Razer();
}
[b]if[/b] ("Logitech".equals(type)) {
[b]return[/b] [b]new[/b] Logitech();
}
[b]return[/b] [b]null[/b];
}
}
4.测试
[b]public[/b] [b]class[/b] TestDemo {
[b]public[/b] [b]static[/b] [b]void[/b] main(String[] args) {
KeyboardFactory factory = [b]new[/b] KeyboardFactory();
Keyboard keyBoard = factory.makeKeyBoard("Razer");
//存在此类型的键盘就制造
[b]if[/b] (keyBoard != [b]null[/b]) {
keyBoard.makeKeyboard();
}[b]else[/b] {
System.out.println("没有此类型的键盘");
}
}
}
一个抽象产品类,可以派生出多个具体产品类
一个具体工厂类创建过个产品类
[b]缺点:每添加一中类型的键盘,就得修改工厂类,违反闭包原则,扩展时不应修改原有类的内部代码[/b]
[b]工厂方法模式[/b]
[b]一个抽象产品类[/b][b],可以派生出多个具体的产品类[/b]:显示器下有不同牌子的显示器
[b]一个抽象工厂类,可以派生出多个具体的工厂类[/b]:显示器工厂类下有不同显示器的工厂类
[b]一个工厂类只能创建一个具体的产品类实例[/b]:每个显示器工厂类只能创建自己牌子的显示器
代码的Display系列
[b]抽象工厂模式[/b]
[b]多个抽象产品类[/b][b],每个产品类可以派生出多个具体的产品类[/b]
[b]一个抽象工厂类,可以派生出多个具体的工厂类[/b]
[b]每个具体的工厂类可以创建出多个具体的产品,就是创建一个产品线下的多个产品[/b]
[b]代码的pc系列[/b]
[b]总结:[/b]
工厂方法模式和抽象工厂模式对比
工厂模式是一种极端情况下的抽象工厂模式,可以将抽象工厂模式看做是工厂模式的扩展和升级
工厂模式用来创建一个产品的等级结构,抽象工厂模式是创建多个产品的等级结构
工厂模式只有一个抽象产品类,而抽象工厂模式有多个抽象产品类
工厂模式的优点:
系统可以在不修改具体工厂角色的情况下引进新产品
客户端不必关心对象如何创建,明确了职责
更好的理解面向对象的原则,面向接口编程,二不是面向实现编程
相关文章推荐
- PropertyChangeListener简单理解
- 什么是设计模式
- 设计模式之创建型模式 - 特别的变量问题
- 七、设计模式——装饰模式
- 设计模式总结
- 设计模式之创建型模式
- 浅谈设计模式的学习
- Ruby设计模式编程之适配器模式实战攻略
- 实例讲解Ruby使用设计模式中的装饰器模式的方法
- 设计模式中的模板方法模式在Ruby中的应用实例两则
- Ruby设计模式编程中对外观模式的应用实例分析
- 实例解析Ruby设计模式编程中Strategy策略模式的使用
- Ruby中使用设计模式中的简单工厂模式和工厂方法模式
- Ruby使用设计模式中的代理模式与装饰模式的代码实例
- 详解组合模式的结构及其在Ruby设计模式编程中的运用
- C# 设计模式系列教程-建造者模式
- C#编程中使用设计模式中的原型模式的实例讲解
- 使用设计模式中的工厂方法模式进行C#编程的示例讲解
- 实例解析C#设计模式编程中简单工厂模式的使用
- 详解C#设计模式编程中生成器模式的使用