您的位置:首页 > 其它

设计模式(二) ---- 工厂模式

2016-06-30 00:00 218 查看
摘要: 设计模式就是一套被反复使用的,多数人知晓的,经过分类,编目的代码设计经验的总结,本系列分篇总结下各个设计模式

[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]

工厂方法模式和抽象工厂模式对比

工厂模式是一种极端情况下的抽象工厂模式,可以将抽象工厂模式看做是工厂模式的扩展和升级

工厂模式用来创建一个产品的等级结构,抽象工厂模式是创建多个产品的等级结构

工厂模式只有一个抽象产品类,而抽象工厂模式有多个抽象产品类

工厂模式的优点:

系统可以在不修改具体工厂角色的情况下引进新产品

客户端不必关心对象如何创建,明确了职责

更好的理解面向对象的原则,面向接口编程,二不是面向实现编程
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息