设计模式-抽象工厂解析

对于学习编程的我们来说,要写可读性好的代码 ,完了还要维护,最好能重复使用,这样的代码就很优美了,但是真正能写出很优美的代码的人有多少,我们的前人总结了很经典的设计模式就是这样优美的, 只有优美的代码才能帮我们走的更远,让我的编程之路更加愉快。
不管你是学习那种语言java也好c,c++,c# ,web中的jsp,php,asp还是其他的,我们说语言这东西其实真的是生生灭灭, 但是里面的思想,模式,是很难在一段时间里消亡的, 所以我们应该也好好的学习一下 设计模式,研究一下当中的精华思想。

好,我们开始。 设计模式是有这么几个分枝:1,Creational patterns构建模式 2,Sturctual patterns结构化模式 3,Behavioral patterns 行为模式


这三类模式很容易理解就是 设计中的三个步骤, 先有create 才会Struct ,再才有Behavior
还有模式的四个基本的要素:模式名称, 模式问题(阐述可能存在的问题和结果),解决方案,效果。

这篇我们先学习一下 [b]Creational patterns[/b]中的几个设计模式
[b]1[/b],Abstract factory抽象工厂模式:
定义:recognizebale by creational methods returnning abstract/interface type.
通过创建的方法的返回的类型(抽象类或者是接口类) 来让系统识别 生产什么样的产品
example:
interface [b]GUIFactory[/b] { //多个产品类一体的工厂类
public Button createButton();
}


class[b] WinFactory [/b]implements GUIFactory { //其中之一的产品的工厂类
public Button createButton() {
return new WinButton();
}
}


class [b]OSXFactory[/b] implements GUIFactory {//其中之一的产品的工厂类
public Button createButton() {
return new OSXButton();
}
}



interface [b]Button[/b] { //抽象, 产品 (通过这个接口来拿具体的产品)
public void paint();
}


class [b]WinButton[/b] implements Button { //具体产品的实现winButton
public void paint() {
System.out.println("I'm a WinButton");
}
}


class[b] OSXButton [/b]implements Button { //具体产品的实现osxButton
public void paint() {
System.out.println("I'm an OSXButton");
}
}

//如果还有具体产品X,X1,X2 和上面同样

class Application {
public Application(GUIFactory factory){
Button button = factory.createButton(); //如果还要增加产品, 这里不用改变!!
button.paint();
}
}

public class ApplicationRunner {
public static void main(String[] args) {
new Application(createOsSpecificFactory());//返回需要的接口type做参数
}

public static GUIFactory createOsSpecificFactory() {
int sys = readFromConfigFile("OS_TYPE");
if (sys == 0) {
return new WinFactory(); //看这方法的返回类型 GUIFactory 和真实返回的,就知道是,抽象接口模式, [b]返回接口的实现类,[/b]
} else {
return new OSXFactory(); //指定要哪中具体的产品(实现类的名,)
}
}
}

上面的代码和注释, 好好的揣摩揣摩,想想这要的好处是什么?1 维护性也不错,只需要找到相应的产品工厂更改,2, 扩展性! 很明显如果还要增加一个产品类, 只要在写一個这个类的生产类实现最上面的工厂接口, 而这个产品要实现规定好的接口。 其他都没有改动,仅仅就是多写了你要添加的, 删除同理了,这样多个工厂的模式,产生了多个种产品的模式,就是抽象工厂模式了。
在什么时候用比较好呢,在什么情况下采用比较合理:

1, 系统要提供多个产品类的[b]库[/b],所以的产品被抽象出一個接口类(比如上面的Button类)
2,这多个的产品工厂类必须要有共同点,才能抽象出來嘛,产品也必须有共同的。
使用interface都是先规定的好共同的操作名称和返回类型,还有字段。
所以同属于同一个产品族是在一起使用的。这一约束必须在系统的设计中体现出来。

这个感觉理论上分析的差不多了
谢谢
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值